onde-cli 0.4.3__tar.gz → 0.5.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 (93) hide show
  1. {onde_cli-0.4.3 → onde_cli-0.5.0}/.agents/AGENTS.md +2 -2
  2. {onde_cli-0.4.3 → onde_cli-0.5.0}/.agents/skills/distribution/SKILL.md +11 -11
  3. {onde_cli-0.4.3/.claude → onde_cli-0.5.0/.agents}/skills/release/SKILL.md +36 -17
  4. {onde_cli-0.4.3 → onde_cli-0.5.0}/.agents/skills/release/evals/evals.json +2 -2
  5. {onde_cli-0.4.3 → onde_cli-0.5.0}/.claude/skills/distribution/SKILL.md +11 -11
  6. {onde_cli-0.4.3/.agents → onde_cli-0.5.0/.claude}/skills/release/SKILL.md +36 -17
  7. {onde_cli-0.4.3 → onde_cli-0.5.0}/.claude/skills/release/evals/evals.json +2 -2
  8. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/ci.yml +4 -4
  9. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-crates.yml +2 -2
  10. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-github.yml +1 -1
  11. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-homebrew.yml +1 -1
  12. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-mcp-registry.yml +10 -9
  13. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-npm.yml +4 -4
  14. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-nuget.yml +11 -11
  15. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-pub.yml +7 -7
  16. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-pypi.yml +5 -5
  17. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-scoop.yml +1 -1
  18. {onde_cli-0.4.3 → onde_cli-0.5.0}/.github/workflows/release-winget.yml +3 -3
  19. onde_cli-0.5.0/.gitignore +20 -0
  20. {onde_cli-0.4.3 → onde_cli-0.5.0}/AGENTS.md +2 -2
  21. {onde_cli-0.4.3 → onde_cli-0.5.0}/CLAUDE.md +2 -2
  22. {onde_cli-0.4.3 → onde_cli-0.5.0}/Cargo.lock +18 -111
  23. {onde_cli-0.4.3 → onde_cli-0.5.0}/Cargo.toml +8 -6
  24. {onde_cli-0.4.3 → onde_cli-0.5.0}/PKG-INFO +1 -1
  25. onde_cli-0.5.0/README.md +64 -0
  26. onde_cli-0.5.0/docs/assets/logo.svg +29 -0
  27. onde_cli-0.5.0/docs/finetune.md +59 -0
  28. onde_cli-0.5.0/docs/install.md +73 -0
  29. {onde_cli-0.4.3 → onde_cli-0.5.0}/docs/mcp-registry.md +4 -4
  30. onde_cli-0.5.0/docs/mcp.md +11 -0
  31. onde_cli-0.5.0/docs/spikes/apple-silicon-backend.md +96 -0
  32. onde_cli-0.5.0/docs/usage.md +21 -0
  33. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging/mcp}/server.json +3 -3
  34. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pub/onde_cli/pubspec.yaml +1 -1
  35. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pypi/pyproject.toml +1 -1
  36. onde_cli-0.4.3/packaging/winget/OndeInference.onde-cli.installer.yaml.in → onde_cli-0.5.0/packaging/winget/OndeInference.CLI.installer.yaml.in +1 -1
  37. onde_cli-0.4.3/packaging/winget/OndeInference.onde-cli.locale.en-US.yaml.in → onde_cli-0.5.0/packaging/winget/OndeInference.CLI.locale.en-US.yaml.in +1 -1
  38. onde_cli-0.4.3/packaging/winget/OndeInference.onde-cli.yaml.in → onde_cli-0.5.0/packaging/winget/OndeInference.CLI.yaml.in +1 -1
  39. onde_cli-0.5.0/src/finetune/spike.rs +590 -0
  40. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/finetune.rs +6 -0
  41. onde_cli-0.4.3/.gitignore +0 -20
  42. onde_cli-0.4.3/README.md +0 -196
  43. {onde_cli-0.4.3 → onde_cli-0.5.0}/.agents/skills/git/SKILL.md +0 -0
  44. {onde_cli-0.4.3 → onde_cli-0.5.0}/.cargo/config.toml +0 -0
  45. {onde_cli-0.4.3 → onde_cli-0.5.0}/.claude/skills/git/SKILL.md +0 -0
  46. {onde_cli-0.4.3 → onde_cli-0.5.0}/.nuget/NuGet/NuGet.Config +0 -0
  47. {onde_cli-0.4.3 → onde_cli-0.5.0}/.nvmrc +0 -0
  48. {onde_cli-0.4.3 → onde_cli-0.5.0}/.sigit/code-cloud-agent/config.toml +0 -0
  49. {onde_cli-0.4.3 → onde_cli-0.5.0}/.sigit/code-review/config.toml +0 -0
  50. {onde_cli-0.4.3 → onde_cli-0.5.0}/.sigit/factory/config.toml +0 -0
  51. {onde_cli-0.4.3 → onde_cli-0.5.0}/LICENSE +0 -0
  52. {onde_cli-0.4.3 → onde_cli-0.5.0}/assets/ondeinference-apps.png +0 -0
  53. {onde_cli-0.4.3 → onde_cli-0.5.0}/build.rs +0 -0
  54. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/README.md.tmpl +0 -0
  55. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/onde-cli/.gitignore +0 -0
  56. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/onde-cli/README.md +0 -0
  57. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/onde-cli/package-lock.json +0 -0
  58. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/onde-cli/package.json +0 -0
  59. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/onde-cli/src/index.ts +0 -0
  60. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/onde-cli/tsconfig.json +0 -0
  61. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/package-main.json.tmpl +0 -0
  62. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/package.json.tmpl +0 -0
  63. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/scripts/render-main-package.cjs +0 -0
  64. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/npm/scripts/render-platform-package.cjs +0 -0
  65. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/nuget/.gitignore +0 -0
  66. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/nuget/onde-cli/Onde.Cli.csproj +0 -0
  67. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/nuget/onde-cli/Program.cs +0 -0
  68. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/nuget/onde-cli/README.md +0 -0
  69. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pub/onde_cli/.gitignore +0 -0
  70. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pub/onde_cli/.pubignore +0 -0
  71. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pub/onde_cli/CHANGELOG.md +0 -0
  72. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pub/onde_cli/LICENSE +0 -0
  73. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pub/onde_cli/README.md +0 -0
  74. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pub/onde_cli/bin/onde.dart +0 -0
  75. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pub/onde_cli/lib/onde_cli.dart +0 -0
  76. {onde_cli-0.4.3 → onde_cli-0.5.0/packaging}/pypi/README.md +0 -0
  77. {onde_cli-0.4.3 → onde_cli-0.5.0}/packaging/windows/check-static-crt.ps1 +0 -0
  78. {onde_cli-0.4.3 → onde_cli-0.5.0}/pyproject.toml +0 -0
  79. {onde_cli-0.4.3 → onde_cli-0.5.0}/rust-toolchain.toml +0 -0
  80. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/app.rs +0 -0
  81. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/chat.rs +0 -0
  82. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/gguf.rs +0 -0
  83. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/gresiq.rs +0 -0
  84. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/hf.rs +0 -0
  85. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/hf_clone.rs +0 -0
  86. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/hf_search.rs +0 -0
  87. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/hf_upload.rs +0 -0
  88. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/main.rs +0 -0
  89. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/mcp.rs +0 -0
  90. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/merge.rs +0 -0
  91. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/project.rs +0 -0
  92. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/token.rs +0 -0
  93. {onde_cli-0.4.3 → onde_cli-0.5.0}/src/ui.rs +0 -0
@@ -64,7 +64,7 @@ The `onde` crate provides the inference engine (`onde::mistralrs`, a vendored mi
64
64
  - **Commits:** include `Co-Authored-By: siGit Code <297239231+sigitc@users.noreply.github.com>` trailer when committing with the agent.
65
65
  - **`[patch.crates-io]` and `path =` deps:** commented out in `Cargo.toml` for local dev against `onde`/`smbcloud-*`/`candle`. Never commit with these uncommented.
66
66
  - **Distribution:** before touching any wrapper package (npm, PyPI, NuGet, pub.dev, Homebrew), read `.agents/skills/distribution/SKILL.md`. Keep all channel versions aligned with the Rust crate version in `Cargo.toml`.
67
- - **MCP Registry:** the listing's ownership markers ship inside the published npm and NuGet artifacts, so a version published without them can never be listed. See `docs/mcp-registry.md` before touching `server.json` or either marker.
68
- - **Wrapper packages** are in `npm/`, `pypi/`, `nuget/`, `pub/`. The npm base manifest is rewritten at release time by `npm/scripts/render-main-package.cjs`; do not hand-edit committed package.json versions as the source of truth for releases.
67
+ - **MCP Registry:** the listing's ownership markers ship inside the published npm and NuGet artifacts, so a version published without them can never be listed. See `docs/mcp-registry.md` before touching `packaging/mcp/server.json` or either marker.
68
+ - **Wrapper packages** are in `packaging/npm/`, `packaging/pypi/`, `packaging/nuget/`, `packaging/pub/`. The npm base manifest is rewritten at release time by `packaging/npm/scripts/render-main-package.cjs`; do not hand-edit committed package.json versions as the source of truth for releases.
69
69
  - **Clippy** runs with `-D warnings` in CI; all lints must pass.
70
70
  - **Rust edition:** 2024; toolchain: stable.
@@ -56,9 +56,9 @@ Good fit for users who already live in npm tooling.
56
56
 
57
57
  Important release detail:
58
58
 
59
- - the committed `npm/onde-cli/package.json` is a working file, not the publish-time source of truth
60
- - the release workflow rewrites the base package manifest with `npm/scripts/render-main-package.cjs`
61
- - platform package manifests are generated on the fly with `npm/scripts/render-platform-package.cjs`
59
+ - the committed `packaging/npm/onde-cli/package.json` is a working file, not the publish-time source of truth
60
+ - the release workflow rewrites the base package manifest with `packaging/npm/scripts/render-main-package.cjs`
61
+ - platform package manifests are generated on the fly with `packaging/npm/scripts/render-platform-package.cjs`
62
62
  - the actual npm version comes from the release tag via `RELEASE_VERSION`, not from manually editing the committed npm manifest before publish
63
63
 
64
64
  ### PyPI
@@ -177,7 +177,7 @@ That makes the safest design a thin Dart launcher that downloads the right nativ
177
177
 
178
178
  Practical consequences:
179
179
 
180
- - `pub/onde_cli/native/` should stay out of the published package
180
+ - `packaging/pub/onde_cli/native/` should stay out of the published package
181
181
  - do not set `publish_to: https://pub.dev` in `pubspec.yaml`; omit `publish_to` for normal pub.dev publishing
182
182
  - use package-level ignore rules so local native staging does not leak into publish input
183
183
  - keep release asset names aligned with the GitHub Release workflow, because the launcher depends on them
@@ -186,9 +186,9 @@ Practical consequences:
186
186
 
187
187
  Run these during verification:
188
188
 
189
- - `dart pub get --directory pub/onde_cli`
190
- - `dart analyze pub/onde_cli`
191
- - `dart pub publish --dry-run --directory pub/onde_cli`
189
+ - `dart pub get --directory packaging/pub/onde_cli`
190
+ - `dart analyze packaging/pub/onde_cli`
191
+ - `dart pub publish --dry-run --directory packaging/pub/onde_cli`
192
192
 
193
193
  ## NuGet-specific notes
194
194
 
@@ -210,10 +210,10 @@ Every user-facing channel should document the same product with channel-specific
210
210
  Main files:
211
211
 
212
212
  - `README.md`
213
- - `npm/onde-cli/README.md`
214
- - `pypi/README.md`
215
- - `nuget/onde-cli/README.md`
216
- - `pub/onde_cli/README.md`
213
+ - `packaging/npm/onde-cli/README.md`
214
+ - `packaging/pypi/README.md`
215
+ - `packaging/nuget/onde-cli/README.md`
216
+ - `packaging/pub/onde_cli/README.md`
217
217
 
218
218
  Keep these aligned on:
219
219
 
@@ -24,18 +24,19 @@ and the distribution skill (channel details) — this skill is the concrete runb
24
24
  These files pin the crate version and must all move together:
25
25
 
26
26
  - `Cargo.toml` — `version = "X.Y.Z"` in `[package]`
27
- - `pub/onde_cli/pubspec.yaml` — `version: X.Y.Z`
28
- - `server.json` — three occurrences: top-level `version`, and the npm and NuGet
27
+ - `packaging/pub/onde_cli/pubspec.yaml` — `version: X.Y.Z`
28
+ - `packaging/mcp/server.json` — three occurrences: top-level `version`, and the npm and NuGet
29
29
  `packages[].version` entries (search for the old version string to catch all)
30
30
 
31
31
  `docs/mcp-registry.md` and `.github/workflows/release-mcp-registry.yml` mention
32
32
  past versions only as historical examples — do not bump those.
33
33
 
34
34
  The npm wrapper manifests are NOT bump targets: the committed `package.json` files
35
- are rewritten at release time by `npm/scripts/render-*.cjs` from the tag.
35
+ are rewritten at release time by `packaging/npm/scripts/render-*.cjs` from the tag.
36
36
 
37
- After editing, run `cargo check --locked` (or let the build update `Cargo.lock`)
38
- so the lockfile carries the new version, and commit it in the same bump commit.
37
+ After editing, run `cargo check` so `Cargo.lock` picks up the new version, then
38
+ `cargo check --locked` to confirm, and commit the lockfile in the bump commit.
39
+ (`--locked` refuses to rewrite the lockfile, so it can't be the step that updates it.)
39
40
 
40
41
  ## Sequence
41
42
 
@@ -43,6 +44,7 @@ Follow the git skill's branch flow — `release/vX.Y.Z → development → main`
43
44
  `--no-ff` at every hop, tag on the final `main` merge commit. Concretely:
44
45
 
45
46
  ```bash
47
+ git fetch <remote> # pre-flight: local development/main must match the remote tips
46
48
  git checkout development
47
49
  git pull <remote> development # start from the pushed tip
48
50
  git checkout -b release/vX.Y.Z
@@ -58,6 +60,10 @@ git push <remote> development main vX.Y.Z
58
60
  git branch -d release/vX.Y.Z # only after the merge lands
59
61
  ```
60
62
 
63
+ Before the checkout, compare local `development` and `main` with the remote tips
64
+ (`git rev-list --left-right --count development...<remote>/development`). If a checkout
65
+ is blocked by untracked leftovers, move them aside; don't delete them.
66
+
61
67
  The remote here is the one whose URL is the sigit.si or GitHub org repo —
62
68
  check `git remote -v`; this repo is commonly cloned with per-account remotes
63
69
  (`gh-setoelkahfi`, `gh-paydii`, `gh-keypair34`) rather than `origin`.
@@ -101,18 +107,23 @@ Every `git commit` and `git merge` in this flow creates a commit — configure
101
107
  signing so merges are signed too, or amend unsigned ones before pushing
102
108
  (`git commit --amend --no-edit -S`, only on unpushed commits).
103
109
 
104
- Commit trailer: end release-related commit messages with
105
-
106
- ```
107
- Co-Authored-By: siGit Code v1.6.7-acp <noreply@sigit.si>
108
- ```
110
+ Commit trailer: end release commits with the co-author trailer of the agent making
111
+ the commit, exactly as that agent's system prompt gives it, for example
112
+ `OndeCode v<version>-<surface> <noreply@ondeinference.com>` or
113
+ `siGit Code v<version>-<surface> <noreply@sigit.si>`. Don't copy a version from an
114
+ older commit or from this file.
109
115
 
110
116
  ## The tag push is the release
111
117
 
112
- Pushing `vX.Y.Z` triggers `release-crates.yml`, which verifies the tag against
113
- `Cargo.toml` and `pubspec.yaml`, publishes the crate, then dispatches the
114
- wrapper workflows (GitHub Releases, npm, NuGet, PyPI, then Homebrew and pub.dev
115
- after the GitHub Release assets exist). There is no separate "publish" step.
118
+ Pushing `vX.Y.Z` triggers a three-level chain. There is no separate "publish" step.
119
+
120
+ 1. `release-crates.yml` (CLI Release Crates.io) checks the tag against `Cargo.toml` and
121
+ `packaging/pub/onde_cli/pubspec.yaml`, publishes the crate, then dispatches
122
+ **GitHub, npm, NuGet and PyPI**.
123
+ 2. `release-github.yml` (CLI Release GitHub) then dispatches **Homebrew, pub.dev, Scoop and winget**
124
+ once the release assets exist. A failed Scoop or winget dispatch only logs a warning
125
+ (`core.warning`), so it is easy to miss.
126
+ 3. `release-nuget.yml` (CLI Release NuGet) then dispatches the **MCP Registry Release**.
116
127
 
117
128
  Watch it land:
118
129
 
@@ -121,7 +132,7 @@ gh run list --branch vX.Y.Z
121
132
  gh run watch <run-id> --exit-status
122
133
  ```
123
134
 
124
- `CI` also runs on the tag push; both should be green. If `release-crates` fails,
135
+ `Tests` (`ci.yml`) also runs on the tag push; both should be green. If `release-crates` fails,
125
136
  no wrapper publishes — fix the cause, move the tag only if it has not published
126
137
  anything yet (crates.io versions are immutable; a failed verify is safe to retry,
127
138
  a published crate is not).
@@ -132,9 +143,14 @@ After the pipeline finishes, spot-check the fan-out (all idempotent, safe to re-
132
143
 
133
144
  - crates.io: `cargo search onde-cli --limit 1`
134
145
  - GitHub Release: `gh release view vX.Y.Z`
135
- - npm: `npm view onde-cli version`
146
+ - npm: `npm view @ondeinference/cli version`
136
147
  - PyPI: `https://pypi.org/pypi/onde-cli/json` → `info.version`
137
- - NuGet: flat container index for `onde-cli`
148
+ - NuGet: `https://api.nuget.org/v3-flatcontainer/onde.cli/index.json`
149
+ - pub.dev: `https://pub.dev/api/packages/onde_cli` → `latest.version`
150
+ - MCP Registry: the `MCP Registry Release` run is green
151
+ - Scoop / winget: `gh run list --workflow release-scoop.yml` / `--workflow release-winget.yml`
152
+ show a run for the tag (they can silently not dispatch). winget lands as a PR to
153
+ `microsoft/winget-pkgs` and only appears after Microsoft's review.
138
154
  - Homebrew/pub.dev trail the GitHub Release; they may take a few extra minutes
139
155
 
140
156
  ## Failure modes seen before
@@ -145,5 +161,8 @@ After the pipeline finishes, spot-check the fan-out (all idempotent, safe to re-
145
161
  - Deleting a leftover `release/` branch that contained unsigned bump commits and
146
162
  redoing the bump fresh — fine, but check it first.
147
163
  - Forgetting `Cargo.lock` in the bump commit.
164
+ - Stale local `development`/`main` (once 12 commits behind the remote), with checkout
165
+ blocked by untracked leftovers from a branch made before the `packaging/` move, at
166
+ paths the newer branch tracks. Fetch first, move the leftovers aside, don't delete.
148
167
  - Pushing with the wrong `gh` account active — the push works, but PR/issue
149
168
  actions afterwards get attributed to the wrong identity.
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "id": 1,
6
6
  "prompt": "Cut release v0.4.3 for onde-cli. Bump all version pins, follow the repo's release branch flow, tag, and push.",
7
- "expected_output": "Agent bumps Cargo.toml, pubspec.yaml, server.json (3 spots), commits signed with Co-Authored-By trailer, creates release/v0.4.3 from development, merges --no-ff into development then main, tags the main merge commit, pushes development+main+tag, and watches the release pipeline.",
7
+ "expected_output": "Agent bumps Cargo.toml, pubspec.yaml, packaging/mcp/server.json (3 spots), commits signed with Co-Authored-By trailer, creates release/v0.4.3 from development, merges --no-ff into development then main, tags the main merge commit, pushes development+main+tag, and watches the release pipeline.",
8
8
  "files": []
9
9
  },
10
10
  {
@@ -22,7 +22,7 @@
22
22
  {
23
23
  "id": 4,
24
24
  "prompt": "Update the README install instructions for the npm wrapper and fix the NuGet README badge that points at the wrong package id.",
25
- "expected_output": "Should NOT deeply engage the release skill beyond reading it; this is distribution/README work. Agent edits npm/onde-cli/README.md and nuget/onde-cli/README.md without cutting a release, bumping versions, or tagging.",
25
+ "expected_output": "Should NOT deeply engage the release skill beyond reading it; this is distribution/README work. Agent edits packaging/npm/onde-cli/README.md and packaging/nuget/onde-cli/README.md without cutting a release, bumping versions, or tagging.",
26
26
  "files": []
27
27
  },
28
28
  {
@@ -56,9 +56,9 @@ Good fit for users who already live in npm tooling.
56
56
 
57
57
  Important release detail:
58
58
 
59
- - the committed `npm/onde-cli/package.json` is a working file, not the publish-time source of truth
60
- - the release workflow rewrites the base package manifest with `npm/scripts/render-main-package.cjs`
61
- - platform package manifests are generated on the fly with `npm/scripts/render-platform-package.cjs`
59
+ - the committed `packaging/npm/onde-cli/package.json` is a working file, not the publish-time source of truth
60
+ - the release workflow rewrites the base package manifest with `packaging/npm/scripts/render-main-package.cjs`
61
+ - platform package manifests are generated on the fly with `packaging/npm/scripts/render-platform-package.cjs`
62
62
  - the actual npm version comes from the release tag via `RELEASE_VERSION`, not from manually editing the committed npm manifest before publish
63
63
 
64
64
  ### PyPI
@@ -177,7 +177,7 @@ That makes the safest design a thin Dart launcher that downloads the right nativ
177
177
 
178
178
  Practical consequences:
179
179
 
180
- - `pub/onde_cli/native/` should stay out of the published package
180
+ - `packaging/pub/onde_cli/native/` should stay out of the published package
181
181
  - do not set `publish_to: https://pub.dev` in `pubspec.yaml`; omit `publish_to` for normal pub.dev publishing
182
182
  - use package-level ignore rules so local native staging does not leak into publish input
183
183
  - keep release asset names aligned with the GitHub Release workflow, because the launcher depends on them
@@ -186,9 +186,9 @@ Practical consequences:
186
186
 
187
187
  Run these during verification:
188
188
 
189
- - `dart pub get --directory pub/onde_cli`
190
- - `dart analyze pub/onde_cli`
191
- - `dart pub publish --dry-run --directory pub/onde_cli`
189
+ - `dart pub get --directory packaging/pub/onde_cli`
190
+ - `dart analyze packaging/pub/onde_cli`
191
+ - `dart pub publish --dry-run --directory packaging/pub/onde_cli`
192
192
 
193
193
  ## NuGet-specific notes
194
194
 
@@ -210,10 +210,10 @@ Every user-facing channel should document the same product with channel-specific
210
210
  Main files:
211
211
 
212
212
  - `README.md`
213
- - `npm/onde-cli/README.md`
214
- - `pypi/README.md`
215
- - `nuget/onde-cli/README.md`
216
- - `pub/onde_cli/README.md`
213
+ - `packaging/npm/onde-cli/README.md`
214
+ - `packaging/pypi/README.md`
215
+ - `packaging/nuget/onde-cli/README.md`
216
+ - `packaging/pub/onde_cli/README.md`
217
217
 
218
218
  Keep these aligned on:
219
219
 
@@ -24,18 +24,19 @@ and the distribution skill (channel details) — this skill is the concrete runb
24
24
  These files pin the crate version and must all move together:
25
25
 
26
26
  - `Cargo.toml` — `version = "X.Y.Z"` in `[package]`
27
- - `pub/onde_cli/pubspec.yaml` — `version: X.Y.Z`
28
- - `server.json` — three occurrences: top-level `version`, and the npm and NuGet
27
+ - `packaging/pub/onde_cli/pubspec.yaml` — `version: X.Y.Z`
28
+ - `packaging/mcp/server.json` — three occurrences: top-level `version`, and the npm and NuGet
29
29
  `packages[].version` entries (search for the old version string to catch all)
30
30
 
31
31
  `docs/mcp-registry.md` and `.github/workflows/release-mcp-registry.yml` mention
32
32
  past versions only as historical examples — do not bump those.
33
33
 
34
34
  The npm wrapper manifests are NOT bump targets: the committed `package.json` files
35
- are rewritten at release time by `npm/scripts/render-*.cjs` from the tag.
35
+ are rewritten at release time by `packaging/npm/scripts/render-*.cjs` from the tag.
36
36
 
37
- After editing, run `cargo check --locked` (or let the build update `Cargo.lock`)
38
- so the lockfile carries the new version, and commit it in the same bump commit.
37
+ After editing, run `cargo check` so `Cargo.lock` picks up the new version, then
38
+ `cargo check --locked` to confirm, and commit the lockfile in the bump commit.
39
+ (`--locked` refuses to rewrite the lockfile, so it can't be the step that updates it.)
39
40
 
40
41
  ## Sequence
41
42
 
@@ -43,6 +44,7 @@ Follow the git skill's branch flow — `release/vX.Y.Z → development → main`
43
44
  `--no-ff` at every hop, tag on the final `main` merge commit. Concretely:
44
45
 
45
46
  ```bash
47
+ git fetch <remote> # pre-flight: local development/main must match the remote tips
46
48
  git checkout development
47
49
  git pull <remote> development # start from the pushed tip
48
50
  git checkout -b release/vX.Y.Z
@@ -58,6 +60,10 @@ git push <remote> development main vX.Y.Z
58
60
  git branch -d release/vX.Y.Z # only after the merge lands
59
61
  ```
60
62
 
63
+ Before the checkout, compare local `development` and `main` with the remote tips
64
+ (`git rev-list --left-right --count development...<remote>/development`). If a checkout
65
+ is blocked by untracked leftovers, move them aside; don't delete them.
66
+
61
67
  The remote here is the one whose URL is the sigit.si or GitHub org repo —
62
68
  check `git remote -v`; this repo is commonly cloned with per-account remotes
63
69
  (`gh-setoelkahfi`, `gh-paydii`, `gh-keypair34`) rather than `origin`.
@@ -101,18 +107,23 @@ Every `git commit` and `git merge` in this flow creates a commit — configure
101
107
  signing so merges are signed too, or amend unsigned ones before pushing
102
108
  (`git commit --amend --no-edit -S`, only on unpushed commits).
103
109
 
104
- Commit trailer: end release-related commit messages with
105
-
106
- ```
107
- Co-Authored-By: siGit Code v1.6.7-acp <noreply@sigit.si>
108
- ```
110
+ Commit trailer: end release commits with the co-author trailer of the agent making
111
+ the commit, exactly as that agent's system prompt gives it, for example
112
+ `OndeCode v<version>-<surface> <noreply@ondeinference.com>` or
113
+ `siGit Code v<version>-<surface> <noreply@sigit.si>`. Don't copy a version from an
114
+ older commit or from this file.
109
115
 
110
116
  ## The tag push is the release
111
117
 
112
- Pushing `vX.Y.Z` triggers `release-crates.yml`, which verifies the tag against
113
- `Cargo.toml` and `pubspec.yaml`, publishes the crate, then dispatches the
114
- wrapper workflows (GitHub Releases, npm, NuGet, PyPI, then Homebrew and pub.dev
115
- after the GitHub Release assets exist). There is no separate "publish" step.
118
+ Pushing `vX.Y.Z` triggers a three-level chain. There is no separate "publish" step.
119
+
120
+ 1. `release-crates.yml` (CLI Release Crates.io) checks the tag against `Cargo.toml` and
121
+ `packaging/pub/onde_cli/pubspec.yaml`, publishes the crate, then dispatches
122
+ **GitHub, npm, NuGet and PyPI**.
123
+ 2. `release-github.yml` (CLI Release GitHub) then dispatches **Homebrew, pub.dev, Scoop and winget**
124
+ once the release assets exist. A failed Scoop or winget dispatch only logs a warning
125
+ (`core.warning`), so it is easy to miss.
126
+ 3. `release-nuget.yml` (CLI Release NuGet) then dispatches the **MCP Registry Release**.
116
127
 
117
128
  Watch it land:
118
129
 
@@ -121,7 +132,7 @@ gh run list --branch vX.Y.Z
121
132
  gh run watch <run-id> --exit-status
122
133
  ```
123
134
 
124
- `CI` also runs on the tag push; both should be green. If `release-crates` fails,
135
+ `Tests` (`ci.yml`) also runs on the tag push; both should be green. If `release-crates` fails,
125
136
  no wrapper publishes — fix the cause, move the tag only if it has not published
126
137
  anything yet (crates.io versions are immutable; a failed verify is safe to retry,
127
138
  a published crate is not).
@@ -132,9 +143,14 @@ After the pipeline finishes, spot-check the fan-out (all idempotent, safe to re-
132
143
 
133
144
  - crates.io: `cargo search onde-cli --limit 1`
134
145
  - GitHub Release: `gh release view vX.Y.Z`
135
- - npm: `npm view onde-cli version`
146
+ - npm: `npm view @ondeinference/cli version`
136
147
  - PyPI: `https://pypi.org/pypi/onde-cli/json` → `info.version`
137
- - NuGet: flat container index for `onde-cli`
148
+ - NuGet: `https://api.nuget.org/v3-flatcontainer/onde.cli/index.json`
149
+ - pub.dev: `https://pub.dev/api/packages/onde_cli` → `latest.version`
150
+ - MCP Registry: the `MCP Registry Release` run is green
151
+ - Scoop / winget: `gh run list --workflow release-scoop.yml` / `--workflow release-winget.yml`
152
+ show a run for the tag (they can silently not dispatch). winget lands as a PR to
153
+ `microsoft/winget-pkgs` and only appears after Microsoft's review.
138
154
  - Homebrew/pub.dev trail the GitHub Release; they may take a few extra minutes
139
155
 
140
156
  ## Failure modes seen before
@@ -145,5 +161,8 @@ After the pipeline finishes, spot-check the fan-out (all idempotent, safe to re-
145
161
  - Deleting a leftover `release/` branch that contained unsigned bump commits and
146
162
  redoing the bump fresh — fine, but check it first.
147
163
  - Forgetting `Cargo.lock` in the bump commit.
164
+ - Stale local `development`/`main` (once 12 commits behind the remote), with checkout
165
+ blocked by untracked leftovers from a branch made before the `packaging/` move, at
166
+ paths the newer branch tracks. Fetch first, move the leftovers aside, don't delete.
148
167
  - Pushing with the wrong `gh` account active — the push works, but PR/issue
149
168
  actions afterwards get attributed to the wrong identity.
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "id": 1,
6
6
  "prompt": "Cut release v0.4.3 for onde-cli. Bump all version pins, follow the repo's release branch flow, tag, and push.",
7
- "expected_output": "Agent bumps Cargo.toml, pubspec.yaml, server.json (3 spots), commits signed with Co-Authored-By trailer, creates release/v0.4.3 from development, merges --no-ff into development then main, tags the main merge commit, pushes development+main+tag, and watches the release pipeline.",
7
+ "expected_output": "Agent bumps Cargo.toml, pubspec.yaml, packaging/mcp/server.json (3 spots), commits signed with Co-Authored-By trailer, creates release/v0.4.3 from development, merges --no-ff into development then main, tags the main merge commit, pushes development+main+tag, and watches the release pipeline.",
8
8
  "files": []
9
9
  },
10
10
  {
@@ -22,7 +22,7 @@
22
22
  {
23
23
  "id": 4,
24
24
  "prompt": "Update the README install instructions for the npm wrapper and fix the NuGet README badge that points at the wrong package id.",
25
- "expected_output": "Should NOT deeply engage the release skill beyond reading it; this is distribution/README work. Agent edits npm/onde-cli/README.md and nuget/onde-cli/README.md without cutting a release, bumping versions, or tagging.",
25
+ "expected_output": "Should NOT deeply engage the release skill beyond reading it; this is distribution/README work. Agent edits packaging/npm/onde-cli/README.md and packaging/nuget/onde-cli/README.md without cutting a release, bumping versions, or tagging.",
26
26
  "files": []
27
27
  },
28
28
  {
@@ -1,4 +1,4 @@
1
- name: CI
1
+ name: Tests
2
2
 
3
3
  on:
4
4
  push:
@@ -121,7 +121,7 @@ jobs:
121
121
  dotnet-version: 8.0.x
122
122
 
123
123
  - name: Build .NET tool launcher
124
- run: dotnet build nuget/onde-cli/Onde.Cli.csproj --configuration Release
124
+ run: dotnet build packaging/nuget/onde-cli/Onde.Cli.csproj --configuration Release
125
125
 
126
126
  dart-package:
127
127
  name: Dart pub package check
@@ -134,11 +134,11 @@ jobs:
134
134
  uses: dart-lang/setup-dart@v1
135
135
 
136
136
  - name: Get package dependencies
137
- working-directory: pub/onde_cli
137
+ working-directory: packaging/pub/onde_cli
138
138
  run: dart pub get
139
139
 
140
140
  - name: Analyze Dart package
141
- working-directory: pub/onde_cli
141
+ working-directory: packaging/pub/onde_cli
142
142
  run: dart analyze
143
143
 
144
144
  build:
@@ -1,4 +1,4 @@
1
- name: Release crates.io
1
+ name: CLI Release Crates.io
2
2
 
3
3
  # This is the only workflow that reacts to a tag push. It verifies the tag,
4
4
  # publishes the crate, and then dispatches every distribution workflow with the
@@ -93,7 +93,7 @@ jobs:
93
93
  - name: Ensure the pub.dev wrapper matches the tag
94
94
  shell: bash
95
95
  run: |
96
- pub_version="$(sed -n 's/^version: \(.*\)/\1/p' pub/onde_cli/pubspec.yaml | head -n 1)"
96
+ pub_version="$(sed -n 's/^version: \(.*\)/\1/p' packaging/pub/onde_cli/pubspec.yaml | head -n 1)"
97
97
  if [ "$pub_version" != "${{ steps.release.outputs.version }}" ]; then
98
98
  echo "::error::pubspec.yaml is ${pub_version} but the tag is ${{ steps.release.outputs.version }}"
99
99
  exit 1
@@ -1,4 +1,4 @@
1
- name: GitHub Release
1
+ name: CLI Release GitHub
2
2
 
3
3
  # Dispatched by release-crates.yml once the crate publish succeeds.
4
4
  on:
@@ -1,4 +1,4 @@
1
- name: Homebrew CLI Release
1
+ name: CLI Release Homebrew
2
2
 
3
3
  on:
4
4
  workflow_dispatch:
@@ -36,24 +36,24 @@ jobs:
36
36
  - name: Check the server name is consistent across packages
37
37
  shell: bash
38
38
  run: |
39
- server_name="$(jq -r '.name' server.json)"
39
+ server_name="$(jq -r '.name' packaging/mcp/server.json)"
40
40
  echo "Server name: ${server_name}"
41
41
 
42
42
  # npm proves ownership through `mcpName` in the published package.json,
43
43
  # rendered at release time from this template.
44
- grep -q "\"mcpName\": \"${server_name}\"" npm/package-main.json.tmpl
44
+ grep -q "\"mcpName\": \"${server_name}\"" packaging/npm/package-main.json.tmpl
45
45
 
46
46
  # NuGet proves ownership through an `mcp-name:` marker in the package README.
47
- grep -q "mcp-name: ${server_name}" nuget/onde-cli/README.md
47
+ grep -q "mcp-name: ${server_name}" packaging/nuget/onde-cli/README.md
48
48
 
49
49
  - name: Set the version in server.json
50
50
  shell: bash
51
51
  run: |
52
52
  jq --arg v "${RELEASE_VERSION}" \
53
53
  '.version = $v | .packages |= map(.version = $v)' \
54
- server.json > server.tmp
55
- mv server.tmp server.json
56
- cat server.json
54
+ packaging/mcp/server.json > server.tmp
55
+ mv server.tmp packaging/mcp/server.json
56
+ cat packaging/mcp/server.json
57
57
 
58
58
  - name: Verify the published packages carry the ownership marker
59
59
  shell: bash
@@ -62,7 +62,7 @@ jobs:
62
62
  # listed package and looking for a marker naming this server. Checking
63
63
  # the sources isn't enough: a package published before the marker
64
64
  # landed will still be missing it. Both comparisons are case-sensitive.
65
- server_name="$(jq -r '.name' server.json)"
65
+ server_name="$(jq -r '.name' packaging/mcp/server.json)"
66
66
 
67
67
  # npm is queryable within seconds of publishing, but the npm release
68
68
  # workflow may still be building its platform packages when this runs.
@@ -121,10 +121,11 @@ jobs:
121
121
 
122
122
  - name: Publish
123
123
  shell: bash
124
- run: ./mcp-publisher publish
124
+ working-directory: packaging/mcp
125
+ run: ../../mcp-publisher publish
125
126
 
126
127
  - name: Verify the server is listed
127
128
  shell: bash
128
129
  run: |
129
- server_name="$(jq -r '.name' server.json)"
130
+ server_name="$(jq -r '.name' packaging/mcp/server.json)"
130
131
  curl -fsSL "https://registry.modelcontextprotocol.io/v0.1/servers?search=${server_name}" | jq .
@@ -1,4 +1,4 @@
1
- name: NPM Release
1
+ name: CLI Release NPM
2
2
 
3
3
  # Dispatched by release-crates.yml once the crate publish succeeds.
4
4
  on:
@@ -113,7 +113,7 @@ jobs:
113
113
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
114
114
  shell: bash
115
115
  run: |
116
- cd npm
116
+ cd packaging/npm
117
117
 
118
118
  # Binary name from Cargo.toml
119
119
  cargo_bin="onde"
@@ -153,7 +153,7 @@ jobs:
153
153
  cargo_bin="${cargo_bin}.exe"
154
154
  fi
155
155
 
156
- cp "../target/${{ matrix.build.TARGET }}/release/${cargo_bin}" "${node_pkg}/bin"
156
+ cp "../../target/${{ matrix.build.TARGET }}/release/${cargo_bin}" "${node_pkg}/bin"
157
157
 
158
158
  cd "${node_pkg}"
159
159
 
@@ -198,7 +198,7 @@ jobs:
198
198
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
199
199
  shell: bash
200
200
  run: |
201
- cd npm/onde-cli
201
+ cd packaging/npm/onde-cli
202
202
 
203
203
  # Rewrite package.json with the correct release version and
204
204
  # matching optionalDependency versions
@@ -1,4 +1,4 @@
1
- name: NuGet Release
1
+ name: CLI Release NuGet
2
2
 
3
3
  # Dispatched by release-crates.yml once the crate publish succeeds.
4
4
  on:
@@ -142,7 +142,7 @@ jobs:
142
142
  uses: actions/download-artifact@v4
143
143
  with:
144
144
  pattern: nuget-native-*
145
- path: nuget/onde-cli/native
145
+ path: packaging/nuget/onde-cli/native
146
146
  merge-multiple: true
147
147
 
148
148
  - name: Setup .NET SDK
@@ -153,16 +153,16 @@ jobs:
153
153
  - name: Pack .NET tool
154
154
  shell: bash
155
155
  run: |
156
- dotnet pack nuget/onde-cli/Onde.Cli.csproj \
156
+ dotnet pack packaging/nuget/onde-cli/Onde.Cli.csproj \
157
157
  --configuration Release \
158
- --output nuget/dist \
158
+ --output packaging/nuget/dist \
159
159
  -p:PackageVersion=${RELEASE_VERSION}
160
160
 
161
161
  - name: Upload package artifact
162
162
  uses: actions/upload-artifact@v4
163
163
  with:
164
164
  name: nuget-package
165
- path: nuget/dist/*.nupkg
165
+ path: packaging/nuget/dist/*.nupkg
166
166
 
167
167
  smoke-test:
168
168
  name: Smoke test (${{ matrix.os }})
@@ -197,7 +197,7 @@ jobs:
197
197
  uses: actions/download-artifact@v4
198
198
  with:
199
199
  name: nuget-package
200
- path: nuget/dist
200
+ path: packaging/nuget/dist
201
201
 
202
202
  - name: Setup .NET SDK
203
203
  uses: actions/setup-dotnet@v4
@@ -207,7 +207,7 @@ jobs:
207
207
  - name: Install tool from local package
208
208
  shell: pwsh
209
209
  run: |
210
- $packageSource = (Resolve-Path "nuget/dist").Path
210
+ $packageSource = (Resolve-Path "packaging/nuget/dist").Path
211
211
  @"
212
212
  <?xml version="1.0" encoding="utf-8"?>
213
213
  <configuration>
@@ -216,11 +216,11 @@ jobs:
216
216
  <add key="local" value="$packageSource" />
217
217
  </packageSources>
218
218
  </configuration>
219
- "@ | Set-Content -Path "nuget/NuGet.Config"
219
+ "@ | Set-Content -Path "packaging/nuget/NuGet.Config"
220
220
 
221
221
  dotnet tool install `
222
222
  --tool-path ".tool" `
223
- --configfile "nuget/NuGet.Config" `
223
+ --configfile "packaging/nuget/NuGet.Config" `
224
224
  --version "$env:RELEASE_VERSION" `
225
225
  "$env:NUGET_PACKAGE_ID"
226
226
 
@@ -272,7 +272,7 @@ jobs:
272
272
  uses: actions/download-artifact@v4
273
273
  with:
274
274
  name: nuget-package
275
- path: nuget/dist
275
+ path: packaging/nuget/dist
276
276
 
277
277
  - name: Setup .NET SDK
278
278
  uses: actions/setup-dotnet@v4
@@ -297,7 +297,7 @@ jobs:
297
297
  NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
298
298
  shell: bash
299
299
  run: |
300
- dotnet nuget push nuget/dist/*.nupkg \
300
+ dotnet nuget push packaging/nuget/dist/*.nupkg \
301
301
  --api-key "${NUGET_API_KEY}" \
302
302
  --source https://api.nuget.org/v3/index.json \
303
303
  --skip-duplicate