agr-opentui 0.2.0__tar.gz → 0.2.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 (108) hide show
  1. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/.github/renovate.json5 +7 -0
  2. agr_opentui-0.2.1/.github/workflows/bump-version.yml +116 -0
  3. agr_opentui-0.2.1/PKG-INFO +200 -0
  4. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/README.md +33 -0
  5. agr_opentui-0.2.1/pyproject.toml +34 -0
  6. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/uv.lock +2 -16
  7. agr_opentui-0.2.0/PKG-INFO +0 -6
  8. agr_opentui-0.2.0/pyproject.toml +0 -12
  9. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/.github/workflows/build-bin.yml +0 -0
  10. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/.github/workflows/ci.yml +0 -0
  11. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/.github/workflows/publish-pypi.yml +0 -0
  12. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/.gitignore +0 -0
  13. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/Makefile +0 -0
  14. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/agr_opentui/__init__.py +0 -0
  15. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/agr_opentui/bridge.py +0 -0
  16. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/bun.lock +0 -0
  17. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/bunfig.toml +0 -0
  18. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/package.json +0 -0
  19. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/skills.json +0 -0
  20. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/app.ts +0 -0
  21. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/app_logic.ts +0 -0
  22. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/commands.ts +0 -0
  23. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/deps.ts +0 -0
  24. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/main.ts +0 -0
  25. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/runtime/doctor.ts +0 -0
  26. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/runtime/handlers.ts +0 -0
  27. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/runtime/modal_input_handler.ts +0 -0
  28. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/add_flow.ts +0 -0
  29. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/agr.ts +0 -0
  30. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/agr_actions.ts +0 -0
  31. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/clipboard.ts +0 -0
  32. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/data.ts +0 -0
  33. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/discover_filter.ts +0 -0
  34. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/discover_labels.ts +0 -0
  35. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/feedback.ts +0 -0
  36. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/handle_match.ts +0 -0
  37. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/input_mode.ts +0 -0
  38. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/navigation.ts +0 -0
  39. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/preview.ts +0 -0
  40. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_actions.ts +0 -0
  41. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_all.ts +0 -0
  42. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_details.ts +0 -0
  43. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_footer.ts +0 -0
  44. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_help.ts +0 -0
  45. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_list.ts +0 -0
  46. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_missing_config.ts +0 -0
  47. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_preview.ts +0 -0
  48. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_run_modal.ts +0 -0
  49. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_run_options.ts +0 -0
  50. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_tabs.ts +0 -0
  51. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_update_confirm.ts +0 -0
  52. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/render_verify.ts +0 -0
  53. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/runtime_ops.ts +0 -0
  54. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/selection.ts +0 -0
  55. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/skills_file.ts +0 -0
  56. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/skills_source.ts +0 -0
  57. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/ui_feedback.ts +0 -0
  58. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/update.ts +0 -0
  59. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/verify.ts +0 -0
  60. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/verify_coordinator.ts +0 -0
  61. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/services/visible_items.ts +0 -0
  62. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/state.ts +0 -0
  63. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/ui/controller.ts +0 -0
  64. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/ui/layout.ts +0 -0
  65. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/ui/render.ts +0 -0
  66. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/ui/rows_render.ts +0 -0
  67. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/src/ui.ts +0 -0
  68. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/add_flow_service.test.ts +0 -0
  69. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/agr_actions.test.ts +0 -0
  70. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/agr_service.test.ts +0 -0
  71. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/app_logic.test.ts +0 -0
  72. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/clipboard_service.test.ts +0 -0
  73. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/commands_service.test.ts +0 -0
  74. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/data_service.test.ts +0 -0
  75. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/discover_filter_service.test.ts +0 -0
  76. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/discover_labels.test.ts +0 -0
  77. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/feedback_service.test.ts +0 -0
  78. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/handle_match_service.test.ts +0 -0
  79. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/input_mode_service.test.ts +0 -0
  80. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/navigation_service.test.ts +0 -0
  81. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/preview_service.test.ts +0 -0
  82. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_actions_service.test.ts +0 -0
  83. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_all_service.test.ts +0 -0
  84. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_details_service.test.ts +0 -0
  85. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_footer_service.test.ts +0 -0
  86. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_help_service.test.ts +0 -0
  87. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_list_service.test.ts +0 -0
  88. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_missing_config_service.test.ts +0 -0
  89. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_preview_service.test.ts +0 -0
  90. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_run_modal_service.test.ts +0 -0
  91. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_run_options_service.test.ts +0 -0
  92. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_tabs_service.test.ts +0 -0
  93. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_update_confirm_service.test.ts +0 -0
  94. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/render_verify_service.test.ts +0 -0
  95. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/rows_render.test.ts +0 -0
  96. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/runtime_doctor.test.ts +0 -0
  97. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/runtime_handlers.test.ts +0 -0
  98. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/runtime_ops_service.test.ts +0 -0
  99. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/selection_service.test.ts +0 -0
  100. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/skills_file_service.test.ts +0 -0
  101. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/skills_source.test.ts +0 -0
  102. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/ui_controller.test.ts +0 -0
  103. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/ui_feedback_adapter.test.ts +0 -0
  104. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/update_service.test.ts +0 -0
  105. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/verify_coordinator_service.test.ts +0 -0
  106. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/verify_service.test.ts +0 -0
  107. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/test/visible_items_service.test.ts +0 -0
  108. {agr_opentui-0.2.0 → agr_opentui-0.2.1}/tsconfig.json +0 -0
@@ -10,6 +10,13 @@
10
10
  labels: ["dependencies"],
11
11
  rangeStrategy: "bump",
12
12
  packageRules: [
13
+ {
14
+ matchCategories: ["python"],
15
+ groupName: "all python dependencies",
16
+ groupSlug: "all-python-dependencies",
17
+ separateMajorMinor: false,
18
+ separateMinorPatch: false
19
+ },
13
20
  {
14
21
  matchManagers: ["npm"],
15
22
  matchUpdateTypes: ["major"],
@@ -0,0 +1,116 @@
1
+ name: bump-version
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version:
7
+ description: "New version (example: 0.3.0)"
8
+ required: true
9
+ type: string
10
+ branch:
11
+ description: "Branch to update"
12
+ required: true
13
+ default: "master"
14
+ type: string
15
+ create_tag:
16
+ description: "Create and push git tag v<version> after bump"
17
+ required: true
18
+ default: false
19
+ type: boolean
20
+
21
+ permissions:
22
+ contents: write
23
+
24
+ jobs:
25
+ bump:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - name: Checkout target branch
29
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
30
+ with:
31
+ ref: ${{ inputs.branch }}
32
+ fetch-depth: 0
33
+
34
+ - name: Setup Python
35
+ uses: actions/setup-python@v6
36
+ with:
37
+ python-version: "3.14.3"
38
+
39
+ - name: Setup uv
40
+ uses: astral-sh/setup-uv@v6
41
+
42
+ - name: Validate and apply version bump
43
+ env:
44
+ NEW_VERSION: ${{ inputs.version }}
45
+ run: |
46
+ python - <<'PY'
47
+ import os
48
+ import pathlib
49
+ import re
50
+
51
+ new_version = os.environ["NEW_VERSION"].strip()
52
+ if not re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+(?:[-+][0-9A-Za-z.-]+)?", new_version):
53
+ raise SystemExit(
54
+ f"Invalid version '{new_version}'. Expected SemVer-like format, e.g. 0.3.0 or 0.3.0-rc.1"
55
+ )
56
+
57
+ pyproject_path = pathlib.Path("pyproject.toml")
58
+ content = pyproject_path.read_text(encoding="utf-8")
59
+ updated, count = re.subn(
60
+ r'(?m)^version = ".*"$',
61
+ f'version = "{new_version}"',
62
+ content,
63
+ count=1,
64
+ )
65
+ if count != 1:
66
+ raise SystemExit("Could not update [project].version in pyproject.toml")
67
+ pyproject_path.write_text(updated, encoding="utf-8")
68
+ PY
69
+
70
+ - name: Regenerate uv.lock
71
+ run: uv lock
72
+
73
+ - name: Commit and push
74
+ env:
75
+ NEW_VERSION: ${{ inputs.version }}
76
+ TARGET_BRANCH: ${{ inputs.branch }}
77
+ run: |
78
+ git config user.name "github-actions[bot]"
79
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
80
+
81
+ if git diff --quiet -- pyproject.toml uv.lock; then
82
+ echo "No changes to commit."
83
+ exit 0
84
+ fi
85
+
86
+ git add pyproject.toml uv.lock
87
+ git commit -m "chore: bump version to ${NEW_VERSION}"
88
+ git push origin "HEAD:${TARGET_BRANCH}"
89
+
90
+ - name: Create and push version tag
91
+ if: inputs.create_tag
92
+ env:
93
+ NEW_VERSION: ${{ inputs.version }}
94
+ run: |
95
+ TAG="v${NEW_VERSION}"
96
+ if git rev-parse -q --verify "refs/tags/${TAG}" >/dev/null; then
97
+ echo "Tag ${TAG} already exists locally."
98
+ exit 1
99
+ fi
100
+
101
+ if git ls-remote --exit-code --tags origin "refs/tags/${TAG}" >/dev/null; then
102
+ echo "Tag ${TAG} already exists on origin."
103
+ exit 1
104
+ fi
105
+
106
+ git tag -a "${TAG}" -m "Release ${TAG}"
107
+ git push origin "${TAG}"
108
+
109
+ - name: Create GitHub release
110
+ if: inputs.create_tag
111
+ uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
112
+ with:
113
+ tag_name: v${{ inputs.version }}
114
+ name: v${{ inputs.version }}
115
+ generate_release_notes: true
116
+ prerelease: ${{ contains(inputs.version, '-') }}
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.4
2
+ Name: agr-opentui
3
+ Version: 0.2.1
4
+ Summary: OpenTUI frontend for agr
5
+ Project-URL: Homepage, https://github.com/RelativeSure/agr-opentui
6
+ Project-URL: Repository, https://github.com/RelativeSure/agr-opentui
7
+ Project-URL: Issues, https://github.com/RelativeSure/agr-opentui/issues
8
+ Author: Rasmus
9
+ License-Expression: MIT
10
+ Keywords: agr,cli,opentui,skills,tui
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Topic :: Software Development :: Build Tools
19
+ Classifier: Topic :: Utilities
20
+ Requires-Python: >=3.14
21
+ Requires-Dist: agr>=0.7.4
22
+ Description-Content-Type: text/markdown
23
+
24
+ # OpenTUI for agr
25
+
26
+ OpenTUI front-end for managing `agr` skills: browse `agr.toml`, install/remove skills, preview `SKILL.md`, and run skills via `agrx`. Skill discovery is based on `https://github.com/kasperjunge/agent-resources`.
27
+
28
+ ## Usage
29
+
30
+ Tabs:
31
+ - `Skills`: shows dependencies from `agr.toml` and install state.
32
+ - `Discover`: shows skills from `skills.json` (optional).
33
+
34
+ Common keys:
35
+ - `Tab` / `Shift+Tab`: switch tabs
36
+ - Arrow keys: move selection
37
+ - `space`: toggle select
38
+ - `H`: help
39
+ - `q`: quit
40
+
41
+ Skills tab keys:
42
+ - `a`: add skill (handle or `owner/repo/path`)
43
+ - `i`: install selected (bulk)
44
+ - `r`: remove selected (bulk)
45
+ - `v`: preview `SKILL.md`
46
+ - `g`: run with default options (`agrx`)
47
+ - `G`: open run options (tool, interactive, prompt, extra args)
48
+ - `u`: check discover list updates
49
+ - `U`: apply update (no confirm)
50
+ - `s`: apply update (confirm)
51
+ - `S`: apply update + sync (no confirm)
52
+ - `c`: reload config
53
+
54
+ Discover tab keys:
55
+ - `i`: add selected
56
+ - `y`: copy handle/repo to clipboard
57
+ - `a`: add skill
58
+ - `c`: reload config
59
+
60
+ Run options keys (when the modal is open):
61
+ - `t`: cycle tool
62
+ - `u`: toggle `--interactive`
63
+ - `p`: edit `--prompt`
64
+ - `e`: edit extra args
65
+ - `Enter`: run
66
+ - `Esc`: close
67
+
68
+ ## Quick Cheat Sheet
69
+
70
+ Primary flow:
71
+ - `Tab` to `Skills`
72
+ - Arrow keys to select
73
+ - `g` to run, `G` for run options
74
+
75
+ Bulk actions:
76
+ - `space` to multi-select
77
+ - `i` install or `r` remove (Skills tab)
78
+
79
+ Discover flow:
80
+ - `Tab` to `Discover`
81
+ - Arrow keys to select
82
+ - `i` to add, `y` to copy handle
83
+
84
+ ## Requirements
85
+
86
+ - Bun 1.3.8+
87
+ - Zig (required by OpenTUI build tooling)
88
+ - Python 3.10+
89
+ - `uv`
90
+ - `agr` + `agrx` on your `PATH`
91
+
92
+ ## Install
93
+
94
+ ```bash
95
+ bun install
96
+ ```
97
+
98
+ ## Run
99
+
100
+ ```bash
101
+ bun run src/main.ts
102
+ ```
103
+
104
+ Run it from the repo you want to manage (the current working directory is the target repo).
105
+ `agr.toml` is expected in that target repo for `agr add/remove/sync` operations.
106
+
107
+ ### Run From Target Repo
108
+
109
+ ```bash
110
+ cd /path/to/your/project
111
+ agr-tui
112
+ ```
113
+
114
+ `agr-opentui` itself does not need to contain your target repo's `agr.toml`.
115
+
116
+ ## Build
117
+
118
+ ```bash
119
+ bun run build
120
+ ```
121
+
122
+ This creates `bin/agr-tui`.
123
+
124
+ ## Publish to PyPI
125
+
126
+ One-time setup:
127
+ - Create a `pypi` environment in this GitHub repo.
128
+ - In your PyPI project settings, add this repo/workflow as a Trusted Publisher for `.github/workflows/publish-pypi.yml`.
129
+ - Optional: add `testpypi` environment and TestPyPI Trusted Publisher too.
130
+
131
+ Publish via GitHub Actions:
132
+ - Release publish: creating a GitHub release triggers publish to PyPI.
133
+ - Manual: run `publish-pypi` workflow and choose `pypi` or `testpypi`.
134
+
135
+ Publish from local machine:
136
+
137
+ ```bash
138
+ python -m pip install --upgrade build twine
139
+ make py-publish # Upload to PyPI
140
+ make py-publish-test # Upload to TestPyPI
141
+ ```
142
+
143
+ ## Bump Version
144
+
145
+ Update package version before creating a release:
146
+
147
+ 1. Edit `pyproject.toml` and bump `[project].version`.
148
+ 2. Regenerate `uv.lock` so the local package entry matches:
149
+
150
+ ```bash
151
+ uv lock
152
+ ```
153
+
154
+ 3. Run checks:
155
+
156
+ ```bash
157
+ make check
158
+ ```
159
+
160
+ 4. Commit the version bump:
161
+
162
+ ```bash
163
+ git add pyproject.toml uv.lock
164
+ git commit -m "chore: bump version to X.Y.Z"
165
+ ```
166
+
167
+ 5. Create a GitHub release for `vX.Y.Z` (or manually run `publish-pypi` workflow).
168
+
169
+ `publish-pypi.yml` runs automatically when a release is published.
170
+
171
+ Alternative: use `.github/workflows/bump-version.yml` via **Actions → bump-version → Run workflow** and provide:
172
+ - `version` (required): target version like `0.3.0`
173
+ - `branch` (required): target branch to update (default `master`)
174
+ - `create_tag` (required): when enabled, creates/pushes tag `v<version>` and creates a GitHub Release
175
+
176
+ ## Discover List (`skills.json`)
177
+
178
+ If `skills.json` exists, the `Discover` tab will list its entries. It supports:
179
+
180
+ - An array of strings or objects (`{ "label": "...", "handle": "...", "repo": "owner/repo" }`).
181
+ - An object with `source` metadata and `skills` array (see `skills.json` in this repo).
182
+
183
+ When a `source` is configured, the app checks the remote list periodically (about every 6 hours) and can update `skills.json` using the `u`/`U`/`s`/`S` controls.
184
+
185
+ ## Troubleshooting
186
+
187
+ - `Missing agr.toml`: run the app from a repo that has `agr.toml`, or create one.
188
+ - `uv not found`: install `uv` and ensure it’s on `PATH`.
189
+ - `agr/agrx not found`: install `agr` and ensure it’s on `PATH`.
190
+ - `python not found`: install Python 3.
191
+ - `skills.json not found` or parse errors: fix the file format (array or `{ "source": ..., "skills": [...] }`).
192
+ - Discover list not updating: check the `source` URL/repo/branch/path and network access.
193
+ - `SKILL.md` preview says “not found”: the skill may not ship a `SKILL.md` or the path is nonstandard.
194
+ - Copy to clipboard doesn’t work: install `pbcopy` (macOS), `wl-copy` (Wayland), or `xclip` (X11).
195
+
196
+ ## Notes
197
+
198
+ - All actions run through `uv` (`uv run agr`, `uv run agrx`, and `uv run python -m agr_opentui.bridge`).
199
+ - If `agr.toml` is missing in the current directory, install/remove/sync commands are blocked and a warning is shown.
200
+ - Logs are written to `/tmp/agr-opentui.log`.
@@ -117,6 +117,39 @@ make py-publish # Upload to PyPI
117
117
  make py-publish-test # Upload to TestPyPI
118
118
  ```
119
119
 
120
+ ## Bump Version
121
+
122
+ Update package version before creating a release:
123
+
124
+ 1. Edit `pyproject.toml` and bump `[project].version`.
125
+ 2. Regenerate `uv.lock` so the local package entry matches:
126
+
127
+ ```bash
128
+ uv lock
129
+ ```
130
+
131
+ 3. Run checks:
132
+
133
+ ```bash
134
+ make check
135
+ ```
136
+
137
+ 4. Commit the version bump:
138
+
139
+ ```bash
140
+ git add pyproject.toml uv.lock
141
+ git commit -m "chore: bump version to X.Y.Z"
142
+ ```
143
+
144
+ 5. Create a GitHub release for `vX.Y.Z` (or manually run `publish-pypi` workflow).
145
+
146
+ `publish-pypi.yml` runs automatically when a release is published.
147
+
148
+ Alternative: use `.github/workflows/bump-version.yml` via **Actions → bump-version → Run workflow** and provide:
149
+ - `version` (required): target version like `0.3.0`
150
+ - `branch` (required): target branch to update (default `master`)
151
+ - `create_tag` (required): when enabled, creates/pushes tag `v<version>` and creates a GitHub Release
152
+
120
153
  ## Discover List (`skills.json`)
121
154
 
122
155
  If `skills.json` exists, the `Discover` tab will list its entries. It supports:
@@ -0,0 +1,34 @@
1
+ [project]
2
+ name = "agr-opentui"
3
+ version = "0.2.1"
4
+ description = "OpenTUI frontend for agr"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ authors = [
8
+ { name = "Rasmus" },
9
+ ]
10
+ keywords = ["agr", "tui", "cli", "skills", "opentui"]
11
+ classifiers = [
12
+ "Development Status :: 4 - Beta",
13
+ "Environment :: Console",
14
+ "Intended Audience :: Developers",
15
+ "License :: OSI Approved :: MIT License",
16
+ "Operating System :: OS Independent",
17
+ "Programming Language :: Python :: 3",
18
+ "Programming Language :: Python :: 3.14",
19
+ "Topic :: Software Development :: Build Tools",
20
+ "Topic :: Utilities",
21
+ ]
22
+ requires-python = ">=3.14"
23
+ dependencies = [
24
+ "agr>=0.7.4",
25
+ ]
26
+
27
+ [project.urls]
28
+ Homepage = "https://github.com/RelativeSure/agr-opentui"
29
+ Repository = "https://github.com/RelativeSure/agr-opentui"
30
+ Issues = "https://github.com/RelativeSure/agr-opentui/issues"
31
+
32
+ [build-system]
33
+ requires = ["hatchling"]
34
+ build-backend = "hatchling.build"
@@ -1,6 +1,6 @@
1
1
  version = 1
2
2
  revision = 3
3
- requires-python = ">=3.10"
3
+ requires-python = ">=3.14"
4
4
 
5
5
  [[package]]
6
6
  name = "agr"
@@ -19,7 +19,7 @@ wheels = [
19
19
 
20
20
  [[package]]
21
21
  name = "agr-opentui"
22
- version = "0.2.0"
22
+ version = "0.2.1"
23
23
  source = { editable = "." }
24
24
  dependencies = [
25
25
  { name = "agr" },
@@ -33,9 +33,7 @@ name = "anyio"
33
33
  version = "4.12.1"
34
34
  source = { registry = "https://pypi.org/simple" }
35
35
  dependencies = [
36
- { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
37
36
  { name = "idna" },
38
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
39
37
  ]
40
38
  sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" }
41
39
  wheels = [
@@ -72,18 +70,6 @@ wheels = [
72
70
  { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
73
71
  ]
74
72
 
75
- [[package]]
76
- name = "exceptiongroup"
77
- version = "1.3.1"
78
- source = { registry = "https://pypi.org/simple" }
79
- dependencies = [
80
- { name = "typing-extensions", marker = "python_full_version < '3.13'" },
81
- ]
82
- sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" }
83
- wheels = [
84
- { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" },
85
- ]
86
-
87
73
  [[package]]
88
74
  name = "h11"
89
75
  version = "0.16.0"
@@ -1,6 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: agr-opentui
3
- Version: 0.2.0
4
- Summary: OpenTUI frontend for agr
5
- Requires-Python: >=3.14.3
6
- Requires-Dist: agr>=0.7.4
@@ -1,12 +0,0 @@
1
- [project]
2
- name = "agr-opentui"
3
- version = "0.2.0"
4
- description = "OpenTUI frontend for agr"
5
- requires-python = ">=3.14.3"
6
- dependencies = [
7
- "agr>=0.7.4",
8
- ]
9
-
10
- [build-system]
11
- requires = ["hatchling"]
12
- build-backend = "hatchling.build"
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