oasr 0.4.0__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/.gitignore +50 -0
  2. oasr-0.4.0/CHANGELOG.md +199 -0
  3. oasr-0.4.0/CONTRIBUTING.md +40 -0
  4. oasr-0.4.0/LICENSE +187 -0
  5. oasr-0.4.0/NOTICE +8 -0
  6. oasr-0.4.0/PKG-INFO +358 -0
  7. oasr-0.4.0/README.md +139 -0
  8. oasr-0.4.0/docs/.INDEX.md +5 -0
  9. oasr-0.4.0/docs/.images/adapter.png +0 -0
  10. oasr-0.4.0/docs/.images/add-glob.png +0 -0
  11. oasr-0.4.0/docs/.images/add-remote.png +0 -0
  12. oasr-0.4.0/docs/.images/add.png +0 -0
  13. oasr-0.4.0/docs/.images/find-add.png +0 -0
  14. oasr-0.4.0/docs/.images/find.png +0 -0
  15. oasr-0.4.0/docs/.images/help.png +0 -0
  16. oasr-0.4.0/docs/.images/info.png +0 -0
  17. oasr-0.4.0/docs/.images/list.png +0 -0
  18. oasr-0.4.0/docs/.images/rm-glob.png +0 -0
  19. oasr-0.4.0/docs/.images/rm.png +0 -0
  20. oasr-0.4.0/docs/.images/status.png +0 -0
  21. oasr-0.4.0/docs/.images/sync-update.png +0 -0
  22. oasr-0.4.0/docs/.images/sync.png +0 -0
  23. oasr-0.4.0/docs/.images/use.png +0 -0
  24. oasr-0.4.0/docs/QUICKSTART.md +140 -0
  25. oasr-0.4.0/docs/commands/.INDEX.md +30 -0
  26. oasr-0.4.0/docs/commands/ADAPTER.md +44 -0
  27. oasr-0.4.0/docs/commands/ADD.md +19 -0
  28. oasr-0.4.0/docs/commands/CLEAN.md +11 -0
  29. oasr-0.4.0/docs/commands/CLONE.md +110 -0
  30. oasr-0.4.0/docs/commands/CONFIG.md +264 -0
  31. oasr-0.4.0/docs/commands/DIFF.md +91 -0
  32. oasr-0.4.0/docs/commands/EXEC.md +453 -0
  33. oasr-0.4.0/docs/commands/FIND.md +15 -0
  34. oasr-0.4.0/docs/commands/HELP.md +12 -0
  35. oasr-0.4.0/docs/commands/INFO.md +13 -0
  36. oasr-0.4.0/docs/commands/LIST.md +19 -0
  37. oasr-0.4.0/docs/commands/REGISTRY.md +119 -0
  38. oasr-0.4.0/docs/commands/RM.md +17 -0
  39. oasr-0.4.0/docs/commands/ROOT.md +8 -0
  40. oasr-0.4.0/docs/commands/STATUS.md +33 -0
  41. oasr-0.4.0/docs/commands/SYNC.md +107 -0
  42. oasr-0.4.0/docs/commands/UPDATE.md +60 -0
  43. oasr-0.4.0/docs/commands/USE.md +52 -0
  44. oasr-0.4.0/docs/commands/VALIDATE.md +14 -0
  45. oasr-0.4.0/docs/validation/.INDEX.md +6 -0
  46. oasr-0.4.0/docs/validation/ERRORS.md +11 -0
  47. oasr-0.4.0/docs/validation/INFO.md +7 -0
  48. oasr-0.4.0/docs/validation/RULES.md +11 -0
  49. oasr-0.4.0/docs/validation/WARNINGS.md +13 -0
  50. oasr-0.4.0/doctor/SKILL.md +35 -0
  51. oasr-0.4.0/doctor/assets/schemas/session.schema.yaml +87 -0
  52. oasr-0.4.0/doctor/assets/schemas/treatment.schema.yaml +70 -0
  53. oasr-0.4.0/doctor/references/00_ROUTER.md +104 -0
  54. oasr-0.4.0/doctor/references/01_SUMMARY.md +44 -0
  55. oasr-0.4.0/doctor/references/02_TRIGGERS.md +40 -0
  56. oasr-0.4.0/doctor/references/03_ALWAYS.md +43 -0
  57. oasr-0.4.0/doctor/references/04_NEVER.md +45 -0
  58. oasr-0.4.0/doctor/references/05_PROCEDURE.md +99 -0
  59. oasr-0.4.0/doctor/references/06_FAILURES.md +77 -0
  60. oasr-0.4.0/doctor/scripts/include/.doctor/session.yaml +11 -0
  61. oasr-0.4.0/doctor/scripts/include/doctor_cli.py +357 -0
  62. oasr-0.4.0/doctor/scripts/include/doctor_parse.py +348 -0
  63. oasr-0.4.0/doctor/scripts/include/pyproject.toml +12 -0
  64. oasr-0.4.0/doctor/scripts/include/uv.lock +78 -0
  65. oasr-0.4.0/doctor/scripts/router_checks.sh +87 -0
  66. oasr-0.4.0/doctor/scripts/skill.ps1 +65 -0
  67. oasr-0.4.0/doctor/scripts/skill.sh +57 -0
  68. oasr-0.4.0/install.ps1 +201 -0
  69. oasr-0.4.0/install.sh +265 -0
  70. oasr-0.4.0/llms.txt +14 -0
  71. oasr-0.4.0/pyproject.toml +109 -0
  72. oasr-0.4.0/scripts/README.md +71 -0
  73. oasr-0.4.0/scripts/fix.sh +16 -0
  74. oasr-0.4.0/scripts/lint.sh +14 -0
  75. oasr-0.4.0/scripts/test.sh +10 -0
  76. oasr-0.4.0/src/__init__.py +3 -0
  77. oasr-0.4.0/src/__main__.py +6 -0
  78. oasr-0.4.0/src/adapter.py +396 -0
  79. oasr-0.4.0/src/adapters/__init__.py +17 -0
  80. oasr-0.4.0/src/adapters/base.py +254 -0
  81. oasr-0.4.0/src/adapters/claude.py +82 -0
  82. oasr-0.4.0/src/adapters/codex.py +84 -0
  83. oasr-0.4.0/src/adapters/copilot.py +210 -0
  84. oasr-0.4.0/src/adapters/cursor.py +78 -0
  85. oasr-0.4.0/src/adapters/windsurf.py +83 -0
  86. oasr-0.4.0/src/agents/__init__.py +25 -0
  87. oasr-0.4.0/src/agents/base.py +96 -0
  88. oasr-0.4.0/src/agents/claude.py +25 -0
  89. oasr-0.4.0/src/agents/codex.py +25 -0
  90. oasr-0.4.0/src/agents/copilot.py +25 -0
  91. oasr-0.4.0/src/agents/opencode.py +25 -0
  92. oasr-0.4.0/src/agents/registry.py +57 -0
  93. oasr-0.4.0/src/cli.py +97 -0
  94. oasr-0.4.0/src/commands/__init__.py +6 -0
  95. oasr-0.4.0/src/commands/adapter.py +102 -0
  96. oasr-0.4.0/src/commands/add.py +435 -0
  97. oasr-0.4.0/src/commands/clean.py +155 -0
  98. oasr-0.4.0/src/commands/clone.py +178 -0
  99. oasr-0.4.0/src/commands/config.py +163 -0
  100. oasr-0.4.0/src/commands/diff.py +180 -0
  101. oasr-0.4.0/src/commands/exec.py +204 -0
  102. oasr-0.4.0/src/commands/find.py +56 -0
  103. oasr-0.4.0/src/commands/help.py +51 -0
  104. oasr-0.4.0/src/commands/info.py +152 -0
  105. oasr-0.4.0/src/commands/list.py +110 -0
  106. oasr-0.4.0/src/commands/registry.py +303 -0
  107. oasr-0.4.0/src/commands/rm.py +128 -0
  108. oasr-0.4.0/src/commands/status.py +119 -0
  109. oasr-0.4.0/src/commands/sync.py +143 -0
  110. oasr-0.4.0/src/commands/update.py +417 -0
  111. oasr-0.4.0/src/commands/use.py +45 -0
  112. oasr-0.4.0/src/commands/validate.py +74 -0
  113. oasr-0.4.0/src/config/__init__.py +109 -0
  114. oasr-0.4.0/src/config/defaults.py +16 -0
  115. oasr-0.4.0/src/config/schema.py +36 -0
  116. oasr-0.4.0/src/discovery.py +145 -0
  117. oasr-0.4.0/src/manifest.py +437 -0
  118. oasr-0.4.0/src/registry.py +173 -0
  119. oasr-0.4.0/src/remote.py +482 -0
  120. oasr-0.4.0/src/skillcopy/__init__.py +71 -0
  121. oasr-0.4.0/src/skillcopy/local.py +40 -0
  122. oasr-0.4.0/src/skillcopy/remote.py +98 -0
  123. oasr-0.4.0/src/tracking.py +181 -0
  124. oasr-0.4.0/src/validate.py +362 -0
  125. oasr-0.4.0/tests/conftest.py +160 -0
  126. oasr-0.4.0/tests/test_adapters.py +146 -0
  127. oasr-0.4.0/tests/test_agents.py +265 -0
  128. oasr-0.4.0/tests/test_clone.py +95 -0
  129. oasr-0.4.0/tests/test_config.py +203 -0
  130. oasr-0.4.0/tests/test_config_command.py +206 -0
  131. oasr-0.4.0/tests/test_copy.py +70 -0
  132. oasr-0.4.0/tests/test_exec.py +380 -0
  133. oasr-0.4.0/tests/test_help.py +30 -0
  134. oasr-0.4.0/tests/test_list.py +63 -0
  135. oasr-0.4.0/tests/test_multi_skill.py +159 -0
  136. oasr-0.4.0/tests/test_remote.py +147 -0
  137. oasr-0.4.0/tests/test_tracking.py +183 -0
  138. oasr-0.4.0/tests/test_use_glob.py +39 -0
  139. oasr-0.4.0/uv.lock +358 -0
oasr-0.4.0/.gitignore ADDED
@@ -0,0 +1,50 @@
1
+ # Python tooling + build artifacts
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # Virtual environments
7
+ .venv/
8
+ .venv-*/
9
+ venv/
10
+ ENV/
11
+ env/
12
+
13
+ # Packaging / builds
14
+ build/
15
+ dist/
16
+ *.egg-info/
17
+ *.egg
18
+
19
+ # Test / coverage
20
+ .pytest_cache/
21
+ .coverage
22
+ .coverage.*
23
+ htmlcov/
24
+ coverage.xml
25
+
26
+ # Type checking / linting
27
+ .mypy_cache/
28
+ .ruff_cache/
29
+ .pytype/
30
+ .pyre/
31
+
32
+ # Hatch
33
+ .hatch/
34
+
35
+ # Jupyter
36
+ .ipynb_checkpoints/
37
+
38
+ # Editors / OS
39
+ .DS_Store
40
+ .idea/
41
+ .vscode/
42
+
43
+ # Agents
44
+ .codex/
45
+ .windsurf/
46
+ .claude/
47
+ .github/
48
+
49
+ # misc
50
+ tmp/
@@ -0,0 +1,199 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.4.0] - TBD
10
+
11
+ ### Added
12
+ - **🚀 `oasr exec` command** — Execute skills as CLI tools from anywhere
13
+ - Run skills with agent-driven execution: `oasr exec <skill> -p "prompt"`
14
+ - Multiple prompt input methods: inline (`-p`), file (`-i`), or stdin (pipe)
15
+ - Agent selection via flag (`--agent`) or config default
16
+ - Graceful error handling with helpful guidance
17
+ - **`oasr config` command** — Manage OASR configuration
18
+ - `config set <key> <value>` — Set config values (e.g., default agent)
19
+ - `config get <key>` — Retrieve config values
20
+ - `config list` — Display all configuration with agent availability
21
+ - `config path` — Show config file location
22
+ - **`oasr clone` command** — Renamed from `oasr use` for clarity
23
+ - Clones skills from registry to current directory
24
+ - Same functionality as deprecated `oasr use`
25
+ - **Agent driver system** — Support for multiple AI agent CLIs
26
+ - Codex: `codex exec "<prompt>"`
27
+ - GitHub Copilot: `copilot -p "<prompt>"`
28
+ - Claude CLI: `claude <prompt> -p`
29
+ - OpenCode: `opencode run "<prompt>"`
30
+ - Auto-detection of available agent binaries
31
+ - Extensible driver architecture for adding new agents
32
+ - **Multi-skill repository support** — Detect and add multiple skills from one repo
33
+ - `oasr registry add <repo-url>` automatically finds all SKILL.md files
34
+ - Interactive prompt for bulk addition: "Found 3 skills. Add all? [Y/n]"
35
+ - Each skill registered with proper subdirectory URL
36
+
37
+ ### Changed
38
+ - **Config system refactored** — Moved to subpackage architecture
39
+ - `src/config/` subpackage with schema validation
40
+ - New `agent.default` field in config for default agent selection
41
+ - TOML serialization improved (strips None values)
42
+ - Backward compatible with existing configs
43
+
44
+ ### Deprecated
45
+ - **`oasr use` command** — Use `oasr clone` instead
46
+ - Shows deprecation warning (suppressible with `--quiet` or `--json`)
47
+ - Warning: "This command will be removed in v0.5.0"
48
+ - Fully functional shim delegates to `oasr clone`
49
+
50
+ ### Fixed
51
+ - Config validation now properly handles None values in TOML serialization
52
+
53
+ ## [0.3.4] - 2026-02-01
54
+
55
+ ### Fixed
56
+ - Enable PyPI trusted publishing workflow and update package metadata for `oasr`
57
+
58
+ ## [0.3.3] - 2026-01-30
59
+
60
+ ### Fixed
61
+ - **Critical**: Adapters now inject tracking metadata when copying skills
62
+ - Skills copied by `oasr adapter cursor`, `claude`, etc. now include `metadata.oasr`
63
+ - Enables `oasr diff` and `oasr sync` to work with adapter-copied skills
64
+ - Graceful degradation if manifest cannot be loaded
65
+
66
+ ## [0.3.2] - 2026-01-30
67
+
68
+ ### Fixed
69
+ - **Critical**: Adapters now inject tracking metadata when copying skills
70
+ - Skills copied by `oasr adapter cursor`, `claude`, etc. now include `metadata.oasr`
71
+ - Enables `oasr diff` and `oasr sync` to work with adapter-copied skills
72
+ - Graceful degradation if manifest cannot be loaded
73
+
74
+ ## [0.3.1] - 2026-01-30
75
+
76
+ ### Fixed
77
+ - **Critical**: Fix `oasr registry add` and `oasr registry rm` missing arguments
78
+ - Error: "'Namespace' object has no attribute 'recursive'"
79
+ - Error: "'Namespace' object has no attribute 'targets'"
80
+ - Added missing `-r/--recursive` flag to `registry add` and `registry rm`
81
+ - Added missing `--strict` flag to `registry add`
82
+ - Fixed `registry rm` argument name from `names` to `targets` (for glob pattern support)
83
+ - Added missing `--quiet` flag to `registry rm`
84
+
85
+ ## [0.3.0] - 2026-01-30
86
+
87
+ ### Added
88
+ - **Metadata tracking via frontmatter** — Skills now track their source via `metadata.oasr` field in SKILL.md
89
+ - Eliminates need for external tracking files (.oasr directories)
90
+ - Spec-compliant (Open Agent Skill metadata field)
91
+ - Tracks: content hash, source path/URL, sync timestamp
92
+ - **`oasr diff` command** — Show status of tracked skills (up-to-date, outdated, modified, untracked)
93
+ - **`oasr sync` command** — Refresh outdated tracked skills from registry
94
+ - **`oasr registry` command** — New unified registry management
95
+ - `oasr registry` (default) - Validate registry manifests
96
+ - `oasr registry list` - List registered skills
97
+ - `oasr registry add` - Add skills to registry
98
+ - `oasr registry rm` - Remove skills from registry
99
+ - `oasr registry sync` - Sync with remote repositories
100
+
101
+ ### Changed
102
+ - **BREAKING**: Complete CLI taxonomy redesign for clarity and flexibility
103
+ - `oasr add` → `oasr registry add`
104
+ - `oasr rm` → `oasr registry rm`
105
+ - `oasr list` → `oasr registry list`
106
+ - `oasr sync` → `oasr registry` (validation)
107
+ - `oasr sync --update` → `oasr registry sync`
108
+ - `oasr status` → `oasr registry -v`
109
+ - **BREAKING**: `oasr use` now injects tracking metadata automatically
110
+ - Skills copied locally now contain self-describing metadata for drift detection
111
+
112
+ ### Removed
113
+ - **BREAKING**: Removed standalone `add`, `rm`, `list`, `status` commands (moved to `registry` subcommand)
114
+
115
+ ## [0.2.0] - 2026-01-30
116
+
117
+ ### Added
118
+ - **Remote skills support** — register skills from GitHub and GitLab URLs
119
+ - `oasr add` now accepts GitHub/GitLab repository URLs
120
+ - `GITHUB_TOKEN` and `GITLAB_TOKEN` environment variable support for authentication
121
+ - Remote reachability checks in `oasr sync`
122
+ - Automatic fetching and copying of remote skills during `adapter` and `use` operations
123
+ - Smart caching to avoid redundant API calls
124
+ - Graceful failure handling for rate limits and network errors
125
+ - **Parallel fetching** — up to 4 concurrent remote skill downloads
126
+ - **Progress indicators** — real-time feedback during remote operations
127
+ - **`oasr update` command** — self-update ASR tool from GitHub
128
+ - Pulls latest changes with `git pull --ff-only`
129
+ - Displays truncated changelog with commit count and file statistics
130
+ - Reinstalls package automatically (unless `--no-reinstall` specified)
131
+ - Suppresses verbose git output with custom messages
132
+ - JSON output support for automation
133
+ - **`oasr info` command** — detailed skill information display
134
+ - Shows skill metadata: description, source, type, status, files, hash
135
+ - Support for `--files` flag to list all skill files
136
+ - JSON output support with `--json`
137
+ - Clean formatted output with visual separators
138
+ - User feedback during remote operations ("Registering from GitHub...")
139
+ - `skillcopy` module for unified skill copying (local and remote)
140
+ - `remote` module for GitHub/GitLab API integration with full error handling
141
+ - URL parsing and validation for GitHub and GitLab
142
+ - Skill name derivation from remote URLs (kebab-case format)
143
+ - `oasr help` subcommand for viewing command help (e.g., `oasr help list`)
144
+ - Glob pattern support for `oasr use` (e.g., `oasr use "git-*"`)
145
+ - **Copilot adapter** — generates `.github/copilot-instructions.md` with managed skill sections
146
+ - **Claude adapter** — generates `.claude/commands/*.md` files
147
+ - Cross-platform installation scripts: `install.sh` and `install.ps1`
148
+ - Automatic migration from `~/.skills/` to `~/.oasr/`
149
+ - Safe, idempotent migration (only moves oasr-managed files)
150
+ - Comprehensive test suite (41 tests covering new functionality)
151
+ - Documentation reorganization:
152
+ - Split into `docs/QUICKSTART.md` and `docs/commands/`
153
+ - Validation documentation moved to `docs/validation/`
154
+ - Screenshots gallery in `docs/.images/`
155
+ - Individual command pages with examples
156
+
157
+ ### Changed
158
+ - **BREAKING**: `oasr adapter` now always copies skills locally (old `--copy` flag is deprecated)
159
+ - **BREAKING**: Data directory changed from `~/.skills/` to `~/.oasr/`
160
+ - Automatic migration during installation
161
+ - Preserves `~/.skills/` if other files exist
162
+ - `--copy` flag kept for backward compatibility but has no effect
163
+ - Skills are always copied to `.{ide}/skills/` directories for consistency
164
+ - Adapter files now use relative paths to local skill copies
165
+ - Remote skills fetch on-demand (not stored permanently after `oasr add`)
166
+ - Remote operations now show progress and fetch in parallel (3-4x faster)
167
+ - `oasr info` simplified to use positional argument (`oasr info <skill-name>`)
168
+ - `oasr list` output redesigned with box-drawing characters, shortened paths, and `--verbose` flag
169
+ - Renamed `src/oasr_cmd/` to `src/commands/` for clarity
170
+ - Packaging migrated to a `src/` layout
171
+ - Build backend migrated to Hatch (hatchling)
172
+ - CLI binary renamed to `oasr` (with `skills` kept as a compatibility alias)
173
+ - README rebranded to "OASR" (Open Agent Skill Registry)
174
+ - README simplified to focus on problem/solution; details moved to docs
175
+
176
+ ### Fixed
177
+ - W002 validation warning no longer fires for remote skills during registration
178
+ - Remote reachability check now validates specific path, not just repository
179
+ - URL preservation in manifests (no longer mangled by Path conversion)
180
+ - Graceful handling of GitHub API rate limits (operations continue for other skills)
181
+ - Smart caching prevents redundant fetches during adapter operations
182
+ - Error messages now include helpful suggestions (e.g., "Try: oasr list")
183
+
184
+ ### Performance
185
+ - **Parallel remote skill fetching** — 3-4x faster with multiple remote skills
186
+ - **Smart caching** — skip unchanged remote skills during adapter operations
187
+ - **Thread-safe operations** — concurrent downloads with proper synchronization
188
+
189
+ ## [0.1.0] - 2026-01-21
190
+
191
+ ### Added
192
+ - Initial CLI with registry, discovery, validation, adapters, and manifests.
193
+
194
+ [Unreleased]: https://github.com/JordanGunn/asr/compare/v0.3.2...HEAD
195
+ [0.3.2]: https://github.com/JordanGunn/asr/compare/v0.3.1...v0.3.2
196
+ [0.3.1]: https://github.com/JordanGunn/asr/compare/v0.3.0...v0.3.1
197
+ [0.3.0]: https://github.com/JordanGunn/asr/compare/v0.2.0...v0.3.0
198
+ [0.2.0]: https://github.com/JordanGunn/asr/compare/v0.1.0...v0.2.0
199
+ [0.1.0]: https://github.com/JordanGunn/asr/releases/tag/v0.1.0
@@ -0,0 +1,40 @@
1
+ # Contributing
2
+
3
+ Thanks for taking the time to contribute!
4
+
5
+ ## Quick Start (local dev)
6
+
7
+ This project uses `uv` + `hatch`:
8
+
9
+ ```bash
10
+ cd oasr
11
+ uv venv
12
+ source .venv/bin/activate
13
+ uv pip install -e .
14
+ ```
15
+
16
+ ## Running tests
17
+
18
+ ```bash
19
+ cd oasr
20
+ hatch run dev:test
21
+ ```
22
+
23
+ ## What to include in a PR
24
+
25
+ - A clear description of the problem and the approach.
26
+ - Updates to docs (`README.md`, `CHANGELOG.md`) when behavior or UX changes.
27
+ - If you change CLI behavior, include a minimal reproduction / example invocation in the PR description.
28
+
29
+ ## Code style
30
+
31
+ - Keep changes focused and avoid drive-by refactors.
32
+ - Prefer small, composable functions with clear names.
33
+ - Keep `src/cli.py` focused on argparse wiring; command logic should live under `src/commands/`.
34
+
35
+ ## License / attribution
36
+
37
+ By contributing, you agree that your contributions will be licensed under the
38
+ project’s license (see `LICENSE`) and that redistributions should retain
39
+ attribution notices (see `NOTICE`).
40
+
oasr-0.4.0/LICENSE ADDED
@@ -0,0 +1,187 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+
135
+ 6. Trademarks. This License does not grant permission to use the trade
136
+ names, trademarks, service marks, or product names of the Licensor,
137
+ except as required for reasonable and customary use in describing the
138
+ origin of the Work and reproducing the content of the NOTICE file.
139
+
140
+ 7. Disclaimer of Warranty. Unless required by applicable law or
141
+ agreed to in writing, Licensor provides the Work (and each
142
+ Contributor provides its Contributions) on an "AS IS" BASIS,
143
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
144
+ implied, including, without limitation, any warranties or conditions
145
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
146
+ PARTICULAR PURPOSE. You are solely responsible for determining the
147
+ appropriateness of using or redistributing the Work and assume any
148
+ risks associated with Your exercise of permissions under this License.
149
+
150
+ 8. Limitation of Liability. In no event and under no legal theory,
151
+ whether in tort (including negligence), contract, or otherwise,
152
+ unless required by applicable law (such as deliberate and grossly
153
+ negligent acts) or agreed to in writing, shall any Contributor be
154
+ liable to You for damages, including any direct, indirect, special,
155
+ incidental, or consequential damages of any character arising as a
156
+ result of this License or out of the use or inability to use the
157
+ Work (including but not limited to damages for loss of goodwill,
158
+ work stoppage, computer failure or malfunction, or any and all
159
+ other commercial damages or losses), even if such Contributor
160
+ has been advised of the possibility of such damages.
161
+
162
+ 9. Accepting Warranty or Additional Liability. While redistributing
163
+ the Work or Derivative Works thereof, You may choose to offer,
164
+ and charge a fee for, acceptance of support, warranty, indemnity,
165
+ or other liability obligations and/or rights consistent with this
166
+ License. However, in accepting such obligations, You may act only
167
+ on Your own behalf and on Your sole responsibility, not on behalf
168
+ of any other Contributor, and only if You agree to indemnify,
169
+ defend, and hold each Contributor harmless for any liability
170
+ incurred by, or claims asserted against, such Contributor by reason
171
+ of your accepting any such warranty or additional liability.
172
+
173
+ END OF TERMS AND CONDITIONS
174
+
175
+ Copyright 2026 Jordan Godau
176
+
177
+ Licensed under the Apache License, Version 2.0 (the "License");
178
+ you may not use this file except in compliance with the License.
179
+ You may obtain a copy of the License at
180
+
181
+ http://www.apache.org/licenses/LICENSE-2.0
182
+
183
+ Unless required by applicable law or agreed to in writing, software
184
+ distributed under the License is distributed on an "AS IS" BASIS,
185
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
186
+ See the License for the specific language governing permissions and
187
+ limitations under the License.
oasr-0.4.0/NOTICE ADDED
@@ -0,0 +1,8 @@
1
+ ASR CLI
2
+
3
+ Copyright 2026 Jordan Godau
4
+
5
+ This product includes software developed by Jordan Godau.
6
+
7
+ If you redistribute this project or derivative works, please retain this NOTICE
8
+ file to preserve attribution.