agr-opentui 0.2.0__tar.gz → 0.2.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 (108) hide show
  1. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/.github/renovate.json5 +7 -0
  2. agr_opentui-0.2.2/.github/workflows/bump-version.yml +140 -0
  3. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/.github/workflows/publish-pypi.yml +38 -1
  4. agr_opentui-0.2.2/PKG-INFO +203 -0
  5. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/README.md +38 -2
  6. agr_opentui-0.2.2/pyproject.toml +34 -0
  7. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/uv.lock +2 -16
  8. agr_opentui-0.2.0/PKG-INFO +0 -6
  9. agr_opentui-0.2.0/pyproject.toml +0 -12
  10. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/.github/workflows/build-bin.yml +0 -0
  11. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/.github/workflows/ci.yml +0 -0
  12. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/.gitignore +0 -0
  13. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/Makefile +0 -0
  14. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/agr_opentui/__init__.py +0 -0
  15. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/agr_opentui/bridge.py +0 -0
  16. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/bun.lock +0 -0
  17. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/bunfig.toml +0 -0
  18. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/package.json +0 -0
  19. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/skills.json +0 -0
  20. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/app.ts +0 -0
  21. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/app_logic.ts +0 -0
  22. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/commands.ts +0 -0
  23. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/deps.ts +0 -0
  24. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/main.ts +0 -0
  25. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/runtime/doctor.ts +0 -0
  26. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/runtime/handlers.ts +0 -0
  27. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/runtime/modal_input_handler.ts +0 -0
  28. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/add_flow.ts +0 -0
  29. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/agr.ts +0 -0
  30. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/agr_actions.ts +0 -0
  31. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/clipboard.ts +0 -0
  32. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/data.ts +0 -0
  33. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/discover_filter.ts +0 -0
  34. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/discover_labels.ts +0 -0
  35. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/feedback.ts +0 -0
  36. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/handle_match.ts +0 -0
  37. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/input_mode.ts +0 -0
  38. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/navigation.ts +0 -0
  39. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/preview.ts +0 -0
  40. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_actions.ts +0 -0
  41. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_all.ts +0 -0
  42. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_details.ts +0 -0
  43. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_footer.ts +0 -0
  44. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_help.ts +0 -0
  45. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_list.ts +0 -0
  46. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_missing_config.ts +0 -0
  47. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_preview.ts +0 -0
  48. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_run_modal.ts +0 -0
  49. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_run_options.ts +0 -0
  50. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_tabs.ts +0 -0
  51. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_update_confirm.ts +0 -0
  52. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/render_verify.ts +0 -0
  53. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/runtime_ops.ts +0 -0
  54. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/selection.ts +0 -0
  55. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/skills_file.ts +0 -0
  56. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/skills_source.ts +0 -0
  57. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/ui_feedback.ts +0 -0
  58. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/update.ts +0 -0
  59. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/verify.ts +0 -0
  60. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/verify_coordinator.ts +0 -0
  61. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/services/visible_items.ts +0 -0
  62. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/state.ts +0 -0
  63. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/ui/controller.ts +0 -0
  64. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/ui/layout.ts +0 -0
  65. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/ui/render.ts +0 -0
  66. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/ui/rows_render.ts +0 -0
  67. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/src/ui.ts +0 -0
  68. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/add_flow_service.test.ts +0 -0
  69. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/agr_actions.test.ts +0 -0
  70. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/agr_service.test.ts +0 -0
  71. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/app_logic.test.ts +0 -0
  72. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/clipboard_service.test.ts +0 -0
  73. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/commands_service.test.ts +0 -0
  74. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/data_service.test.ts +0 -0
  75. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/discover_filter_service.test.ts +0 -0
  76. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/discover_labels.test.ts +0 -0
  77. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/feedback_service.test.ts +0 -0
  78. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/handle_match_service.test.ts +0 -0
  79. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/input_mode_service.test.ts +0 -0
  80. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/navigation_service.test.ts +0 -0
  81. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/preview_service.test.ts +0 -0
  82. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_actions_service.test.ts +0 -0
  83. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_all_service.test.ts +0 -0
  84. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_details_service.test.ts +0 -0
  85. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_footer_service.test.ts +0 -0
  86. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_help_service.test.ts +0 -0
  87. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_list_service.test.ts +0 -0
  88. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_missing_config_service.test.ts +0 -0
  89. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_preview_service.test.ts +0 -0
  90. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_run_modal_service.test.ts +0 -0
  91. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_run_options_service.test.ts +0 -0
  92. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_tabs_service.test.ts +0 -0
  93. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_update_confirm_service.test.ts +0 -0
  94. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/render_verify_service.test.ts +0 -0
  95. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/rows_render.test.ts +0 -0
  96. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/runtime_doctor.test.ts +0 -0
  97. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/runtime_handlers.test.ts +0 -0
  98. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/runtime_ops_service.test.ts +0 -0
  99. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/selection_service.test.ts +0 -0
  100. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/skills_file_service.test.ts +0 -0
  101. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/skills_source.test.ts +0 -0
  102. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/ui_controller.test.ts +0 -0
  103. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/ui_feedback_adapter.test.ts +0 -0
  104. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/update_service.test.ts +0 -0
  105. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/verify_coordinator_service.test.ts +0 -0
  106. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/verify_service.test.ts +0 -0
  107. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/test/visible_items_service.test.ts +0 -0
  108. {agr_opentui-0.2.0 → agr_opentui-0.2.2}/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,140 @@
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: true
19
+ type: boolean
20
+ create_release:
21
+ description: "Create a GitHub release after tagging"
22
+ required: false
23
+ default: true
24
+ type: boolean
25
+ workflow_call:
26
+ inputs:
27
+ version:
28
+ description: "New version (example: 0.3.0)"
29
+ required: true
30
+ type: string
31
+ branch:
32
+ description: "Branch to update"
33
+ required: true
34
+ type: string
35
+ create_tag:
36
+ description: "Create and push git tag v<version> after bump"
37
+ required: true
38
+ type: boolean
39
+ create_release:
40
+ description: "Create a GitHub release after tagging"
41
+ required: false
42
+ default: true
43
+ type: boolean
44
+
45
+ permissions:
46
+ contents: write
47
+
48
+ jobs:
49
+ bump:
50
+ runs-on: ubuntu-latest
51
+ steps:
52
+ - name: Checkout target branch
53
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
54
+ with:
55
+ ref: ${{ inputs.branch }}
56
+ fetch-depth: 0
57
+
58
+ - name: Setup Python
59
+ uses: actions/setup-python@v6
60
+ with:
61
+ python-version: "3.14.3"
62
+
63
+ - name: Setup uv
64
+ uses: astral-sh/setup-uv@v6
65
+
66
+ - name: Validate and apply version bump
67
+ env:
68
+ NEW_VERSION: ${{ inputs.version }}
69
+ run: |
70
+ python - <<'PY'
71
+ import os
72
+ import pathlib
73
+ import re
74
+
75
+ new_version = os.environ["NEW_VERSION"].strip()
76
+ if not re.fullmatch(r"[0-9]+\.[0-9]+\.[0-9]+(?:[-+][0-9A-Za-z.-]+)?", new_version):
77
+ raise SystemExit(
78
+ f"Invalid version '{new_version}'. Expected SemVer-like format, e.g. 0.3.0 or 0.3.0-rc.1"
79
+ )
80
+
81
+ pyproject_path = pathlib.Path("pyproject.toml")
82
+ content = pyproject_path.read_text(encoding="utf-8")
83
+ updated, count = re.subn(
84
+ r'(?m)^version = ".*"$',
85
+ f'version = "{new_version}"',
86
+ content,
87
+ count=1,
88
+ )
89
+ if count != 1:
90
+ raise SystemExit("Could not update [project].version in pyproject.toml")
91
+ pyproject_path.write_text(updated, encoding="utf-8")
92
+ PY
93
+
94
+ - name: Regenerate uv.lock
95
+ run: uv lock
96
+
97
+ - name: Commit and push
98
+ env:
99
+ NEW_VERSION: ${{ inputs.version }}
100
+ TARGET_BRANCH: ${{ inputs.branch }}
101
+ run: |
102
+ git config user.name "github-actions[bot]"
103
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
104
+
105
+ if git diff --quiet -- pyproject.toml uv.lock; then
106
+ echo "No changes to commit."
107
+ exit 0
108
+ fi
109
+
110
+ git add pyproject.toml uv.lock
111
+ git commit -m "chore: bump version to ${NEW_VERSION}"
112
+ git push origin "HEAD:${TARGET_BRANCH}"
113
+
114
+ - name: Create and push version tag
115
+ if: inputs.create_tag
116
+ env:
117
+ NEW_VERSION: ${{ inputs.version }}
118
+ run: |
119
+ TAG="v${NEW_VERSION}"
120
+ if git rev-parse -q --verify "refs/tags/${TAG}" >/dev/null; then
121
+ echo "Tag ${TAG} already exists locally."
122
+ exit 1
123
+ fi
124
+
125
+ if git ls-remote --exit-code --tags origin "refs/tags/${TAG}" >/dev/null; then
126
+ echo "Tag ${TAG} already exists on origin."
127
+ exit 1
128
+ fi
129
+
130
+ git tag -a "${TAG}" -m "Release ${TAG}"
131
+ git push origin "${TAG}"
132
+
133
+ - name: Create GitHub release
134
+ if: inputs.create_tag && inputs.create_release
135
+ uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
136
+ with:
137
+ tag_name: v${{ inputs.version }}
138
+ name: v${{ inputs.version }}
139
+ generate_release_notes: true
140
+ prerelease: ${{ contains(inputs.version, '-') }}
@@ -5,6 +5,20 @@ on:
5
5
  types: [published]
6
6
  workflow_dispatch:
7
7
  inputs:
8
+ bump_version:
9
+ description: "Run bump-version before building and publishing"
10
+ required: true
11
+ type: boolean
12
+ default: false
13
+ version:
14
+ description: "New version to use when bump_version is enabled (example: 0.3.0)"
15
+ required: false
16
+ type: string
17
+ branch:
18
+ description: "Branch to build from (and bump when enabled)"
19
+ required: true
20
+ type: string
21
+ default: master
8
22
  target:
9
23
  description: "Where to publish the package"
10
24
  required: true
@@ -14,11 +28,34 @@ on:
14
28
  - testpypi
15
29
  default: pypi
16
30
 
31
+ permissions:
32
+ contents: write
33
+
17
34
  jobs:
35
+ bump-version:
36
+ if: github.event_name == 'workflow_dispatch' && inputs.bump_version
37
+ uses: ./.github/workflows/bump-version.yml
38
+ with:
39
+ version: ${{ inputs.version }}
40
+ branch: ${{ inputs.branch }}
41
+ create_tag: true
42
+ create_release: false
43
+ secrets: inherit
44
+
18
45
  build:
46
+ needs: bump-version
47
+ if: ${{ always() && (needs.bump-version.result == 'success' || needs.bump-version.result == 'skipped') }}
19
48
  runs-on: ubuntu-latest
20
49
  steps:
21
- - name: Checkout
50
+ - name: Checkout (workflow_dispatch branch)
51
+ if: github.event_name == 'workflow_dispatch'
52
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
53
+ with:
54
+ ref: ${{ inputs.branch }}
55
+ fetch-depth: 0
56
+
57
+ - name: Checkout (release ref)
58
+ if: github.event_name == 'release'
22
59
  uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
23
60
 
24
61
  - name: Setup Python
@@ -0,0 +1,203 @@
1
+ Metadata-Version: 2.4
2
+ Name: agr-opentui
3
+ Version: 0.2.2
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
+ Runtime (using `agr-tui`):
87
+ - Python 3.10+
88
+ - `uv`
89
+ - `agr` + `agrx` on your `PATH`
90
+
91
+ Build/Development (working on this repo):
92
+ - Bun 1.3.8+
93
+ - Zig (required by OpenTUI build tooling)
94
+
95
+ ## Install
96
+
97
+ ```bash
98
+ bun install
99
+ ```
100
+
101
+ ## Run
102
+
103
+ ```bash
104
+ bun run src/main.ts
105
+ ```
106
+
107
+ Run it from the repo you want to manage (the current working directory is the target repo).
108
+ `agr.toml` is expected in that target repo for `agr add/remove/sync` operations.
109
+
110
+ ### Run From Target Repo
111
+
112
+ ```bash
113
+ cd /path/to/your/project
114
+ agr-tui
115
+ ```
116
+
117
+ `agr-opentui` itself does not need to contain your target repo's `agr.toml`.
118
+
119
+ ## Build
120
+
121
+ ```bash
122
+ bun run build
123
+ ```
124
+
125
+ This creates `bin/agr-tui`.
126
+
127
+ ## Publish to PyPI
128
+
129
+ One-time setup:
130
+ - Create a `pypi` environment in this GitHub repo.
131
+ - In your PyPI project settings, add this repo/workflow as a Trusted Publisher for `.github/workflows/publish-pypi.yml`.
132
+ - Optional: add `testpypi` environment and TestPyPI Trusted Publisher too.
133
+
134
+ Publish via GitHub Actions:
135
+ - Release publish: creating a GitHub release triggers publish to PyPI.
136
+ - Manual: run `publish-pypi` workflow and choose `pypi` or `testpypi`.
137
+
138
+ Publish from local machine:
139
+
140
+ ```bash
141
+ python -m pip install --upgrade build twine
142
+ make py-publish # Upload to PyPI
143
+ make py-publish-test # Upload to TestPyPI
144
+ ```
145
+
146
+ ## Bump Version
147
+
148
+ Update package version before creating a release:
149
+
150
+ 1. Edit `pyproject.toml` and bump `[project].version`.
151
+ 2. Regenerate `uv.lock` so the local package entry matches:
152
+
153
+ ```bash
154
+ uv lock
155
+ ```
156
+
157
+ 3. Run checks:
158
+
159
+ ```bash
160
+ make check
161
+ ```
162
+
163
+ 4. Commit the version bump:
164
+
165
+ ```bash
166
+ git add pyproject.toml uv.lock
167
+ git commit -m "chore: bump version to X.Y.Z"
168
+ ```
169
+
170
+ 5. Create a GitHub release for `vX.Y.Z` (or manually run `publish-pypi` workflow).
171
+
172
+ `publish-pypi.yml` runs automatically when a release is published.
173
+
174
+ Alternative: use `.github/workflows/bump-version.yml` via **Actions → bump-version → Run workflow** and provide:
175
+ - `version` (required): target version like `0.3.0`
176
+ - `branch` (required): target branch to update (default `master`)
177
+ - `create_tag` (required, default enabled): creates/pushes tag `v<version>` and creates a GitHub Release
178
+
179
+ ## Discover List (`skills.json`)
180
+
181
+ If `skills.json` exists, the `Discover` tab will list its entries. It supports:
182
+
183
+ - An array of strings or objects (`{ "label": "...", "handle": "...", "repo": "owner/repo" }`).
184
+ - An object with `source` metadata and `skills` array (see `skills.json` in this repo).
185
+
186
+ 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.
187
+
188
+ ## Troubleshooting
189
+
190
+ - `Missing agr.toml`: run the app from a repo that has `agr.toml`, or create one.
191
+ - `uv not found`: install `uv` and ensure it’s on `PATH`.
192
+ - `agr/agrx not found`: install `agr` and ensure it’s on `PATH`.
193
+ - `python not found`: install Python 3.
194
+ - `skills.json not found` or parse errors: fix the file format (array or `{ "source": ..., "skills": [...] }`).
195
+ - Discover list not updating: check the `source` URL/repo/branch/path and network access.
196
+ - `SKILL.md` preview says “not found”: the skill may not ship a `SKILL.md` or the path is nonstandard.
197
+ - Copy to clipboard doesn’t work: install `pbcopy` (macOS), `wl-copy` (Wayland), or `xclip` (X11).
198
+
199
+ ## Notes
200
+
201
+ - All actions run through `uv` (`uv run agr`, `uv run agrx`, and `uv run python -m agr_opentui.bridge`).
202
+ - If `agr.toml` is missing in the current directory, install/remove/sync commands are blocked and a warning is shown.
203
+ - Logs are written to `/tmp/agr-opentui.log`.
@@ -60,12 +60,15 @@ Discover flow:
60
60
 
61
61
  ## Requirements
62
62
 
63
- - Bun 1.3.8+
64
- - Zig (required by OpenTUI build tooling)
63
+ Runtime (using `agr-tui`):
65
64
  - Python 3.10+
66
65
  - `uv`
67
66
  - `agr` + `agrx` on your `PATH`
68
67
 
68
+ Build/Development (working on this repo):
69
+ - Bun 1.3.8+
70
+ - Zig (required by OpenTUI build tooling)
71
+
69
72
  ## Install
70
73
 
71
74
  ```bash
@@ -117,6 +120,39 @@ make py-publish # Upload to PyPI
117
120
  make py-publish-test # Upload to TestPyPI
118
121
  ```
119
122
 
123
+ ## Bump Version
124
+
125
+ Update package version before creating a release:
126
+
127
+ 1. Edit `pyproject.toml` and bump `[project].version`.
128
+ 2. Regenerate `uv.lock` so the local package entry matches:
129
+
130
+ ```bash
131
+ uv lock
132
+ ```
133
+
134
+ 3. Run checks:
135
+
136
+ ```bash
137
+ make check
138
+ ```
139
+
140
+ 4. Commit the version bump:
141
+
142
+ ```bash
143
+ git add pyproject.toml uv.lock
144
+ git commit -m "chore: bump version to X.Y.Z"
145
+ ```
146
+
147
+ 5. Create a GitHub release for `vX.Y.Z` (or manually run `publish-pypi` workflow).
148
+
149
+ `publish-pypi.yml` runs automatically when a release is published.
150
+
151
+ Alternative: use `.github/workflows/bump-version.yml` via **Actions → bump-version → Run workflow** and provide:
152
+ - `version` (required): target version like `0.3.0`
153
+ - `branch` (required): target branch to update (default `master`)
154
+ - `create_tag` (required, default enabled): creates/pushes tag `v<version>` and creates a GitHub Release
155
+
120
156
  ## Discover List (`skills.json`)
121
157
 
122
158
  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.2"
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.2"
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