diff --git a/.github/workflows/publish-skill.yml b/.github/workflows/publish-skill.yml deleted file mode 100644 index a6071ca..0000000 --- a/.github/workflows/publish-skill.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Publish skill - -on: - push: - branches: - - main - paths: - - "skills/attach-cli/**" - - "scripts/verify-published-skill.sh" - workflow_dispatch: - -permissions: - contents: read - -jobs: - publish: - name: publish skill - if: ${{ github.ref == 'refs/heads/main' }} - runs-on: ubuntu-latest - timeout-minutes: 15 - environment: - name: skill-release - deployment: false - concurrency: - group: publish-skill-${{ github.repository }}-main - cancel-in-progress: false - steps: - - name: Check out - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - with: - fetch-depth: 0 - persist-credentials: false - - - name: Set up Tessl - uses: tesslio/setup-tessl@33e1c9253e3673f28e1b8949475b250dbd57918e - with: - version: "0.94.0" - token: ${{ secrets.TESSL_TOKEN }} - - - name: Publish manifest version - id: publish - run: | - tessl plugin lint skills/attach-cli - tessl plugin publish skills/attach-cli - jq -r '"version=" + .version' \ - skills/attach-cli/.tessl-plugin/plugin.json >> "$GITHUB_OUTPUT" - - - name: Smoke published skill - env: - PUBLISHED_VERSION: ${{ steps.publish.outputs.version }} - run: | - ./scripts/verify-published-skill.sh "$PUBLISHED_VERSION" diff --git a/AGENTS.md b/AGENTS.md index 2f244c7..b452ee6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,13 +10,13 @@ Keep tracker links out of package-facing docs (`README.md`). ## Orientation -| Doc | When | -| ---------------------------------------------------- | ----------------------------- | -| [Contributing](CONTRIBUTING.md) | setup, verify, PRs | -| [Auth contract](docs/adr-001-auth-and-principals.md) | principals, enroll, quotas | -| [Deploy](docs/deploy.md) | Worker CD + bootstrap | -| [Releasing](docs/releasing.md) | npm CLI + Tessl skill publish | -| [attach-cli skill](skills/attach-cli/SKILL.md) | consumer agent skill (Tessl) | +| Doc | When | +| ---------------------------------------------------- | --------------------------- | +| [Contributing](CONTRIBUTING.md) | setup, verify, PRs | +| [Auth contract](docs/adr-001-auth-and-principals.md) | principals, enroll, quotas | +| [Deploy](docs/deploy.md) | Worker CD + bootstrap | +| [Releasing](docs/releasing.md) | npm CLI + Homebrew release | +| [attach-cli skill](skills/attach-cli/SKILL.md) | consumer agent skill source | | Path | Role | | ---------- | --------------------------------------- | diff --git a/docs/releasing.md b/docs/releasing.md index 922a87e..3fad269 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -52,16 +52,3 @@ retries the idempotent formula update without publishing another version. Push to `main` → GitHub Environment `production` → wrangler (see [Deploy](deploy.md)). Do not deploy the production Worker from a laptop. - -## Tessl skill (`uinaf/attach-cli`) - -Agent skill package under `skills/attach-cli/`. Skill SemVer lives in -`skills/attach-cli/.tessl-plugin/plugin.json` and is independent of the npm CLI -version. - -Push to `main` touching `skills/attach-cli/**` → `.github/workflows/publish-skill.yml` -→ GitHub Environment `skill-release` (`TESSL_TOKEN`) → -Tessl plugin lint and manifest-version publish → -`scripts/verify-published-skill.sh` (strict Tessl install + Codex discovery). - -Cloud Tessl review is not part of publish. diff --git a/scripts/verify-published-skill.sh b/scripts/verify-published-skill.sh deleted file mode 100755 index 2218442..0000000 --- a/scripts/verify-published-skill.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -repository_root=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) -manifest=$repository_root/skills/attach-cli/.tessl-plugin/plugin.json -requested_version=${1:-} - -if [ -z "$requested_version" ]; then - printf 'usage: %s VERSION\n' "${0##*/}" >&2 - exit 2 -fi - -for required_command in cat grep jq mktemp sleep tessl; do - command -v "$required_command" >/dev/null 2>&1 || { - printf 'required command not found: %s\n' "$required_command" >&2 - exit 1 - } -done - -name=$(jq -er '.name | select(type == "string" and length > 0)' "$manifest") -version=$(jq -er '.version | select(test("^[0-9]+\\.[0-9]+\\.[0-9]+$"))' "$manifest") -install_attempts=${TESSL_VERIFY_INSTALL_ATTEMPTS:-30} -install_interval_seconds=${TESSL_VERIFY_INSTALL_INTERVAL_SECONDS:-10} -if ! [[ "$install_attempts" =~ ^[1-9][0-9]*$ ]] || \ - ! [[ "$install_interval_seconds" =~ ^[0-9]+$ ]]; then - printf 'install retry settings must be positive attempts and non-negative seconds\n' >&2 - exit 1 -fi -if [ "$requested_version" != "$version" ]; then - printf 'requested version %s does not match manifest version %s\n' \ - "$requested_version" "$version" >&2 - exit 1 -fi - -verification_root=$(mktemp -d "${TMPDIR:-/tmp}/attach-cli-skill-release.XXXXXX") -cleanup() { - rm -rf -- "$verification_root" -} -trap cleanup EXIT - -install_log=$verification_root/install.log -installed=false -for ((attempt = 1; attempt <= install_attempts; attempt += 1)); do - if ( - cd "$verification_root" - tessl install --yes --strict --agent codex "$name@$version" - ) > "$install_log" 2>&1; then - cat "$install_log" - installed=true - break - fi - - if ! grep -F 'moderation did not pass' "$install_log" >/dev/null || \ - [ "$attempt" -eq "$install_attempts" ]; then - cat "$install_log" >&2 - printf 'published skill did not become installable after %d attempt(s)\n' \ - "$attempt" >&2 - exit 1 - fi - - printf 'published skill is awaiting moderation; retrying install (%d/%d)\n' \ - "$attempt" "$install_attempts" - sleep "$install_interval_seconds" -done - -if [ "$installed" != true ]; then - printf 'published skill installation did not complete\n' >&2 - exit 1 -fi - -skill_name=${name##*/} -codex_skill=$verification_root/.codex/skills/tessl__$skill_name/SKILL.md -if [ ! -s "$codex_skill" ] || ! grep -Fx "name: $skill_name" "$codex_skill" >/dev/null; then - printf 'published skill is missing from the Codex discovery surface: %s\n' \ - "$codex_skill" >&2 - exit 1 -fi - -printf 'smoked published skill %s@%s through Codex discovery\n' "$name" "$version" diff --git a/skills/attach-cli/.tessl-plugin/plugin.json b/skills/attach-cli/.tessl-plugin/plugin.json deleted file mode 100644 index d084fc9..0000000 --- a/skills/attach-cli/.tessl-plugin/plugin.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "uinaf/attach-cli", - "description": "Uploads PR and validation media to a self-hosted attach Worker via the installed attach CLI (`attach` or `gh attach`): zero-config hosted device-flow login with an ATTACH_GITHUB_CLIENT_ID override for custom deployments, put/delete/logout of screenshots and artifacts, preview `/p/…` URLs, raw `/o/…` embeds via `--markdown`, and `--json`/`--url` output; or GitHub App JWT enroll then `att_` PUT for agents. Use when the user asks to attach a screenshot, upload PR media, put an image on attach.uinaf.dev (or ATTACH_API_BASE), share a validation screenshot URL, run attach login/put/delete/logout, use gh attach, host validation media, take down attach media, or enroll an App agent for attach. Do not use for Worker deploy, vault, Cloudflare ops, or inventing a second upload client.", - "skills": ["."], - "version": "0.1.4" -}