onde-cli 0.2.1__tar.gz → 0.3.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 (68) hide show
  1. onde_cli-0.3.1/.agents/skills/distribution/SKILL.md +226 -0
  2. onde_cli-0.3.1/.agents/skills/git/SKILL.md +43 -0
  3. {onde_cli-0.2.1 → onde_cli-0.3.1}/.github/workflows/ci.yml +43 -6
  4. {onde_cli-0.2.1 → onde_cli-0.3.1}/.github/workflows/release-crates.yml +0 -17
  5. {onde_cli-0.2.1 → onde_cli-0.3.1}/.github/workflows/release-github.yml +3 -3
  6. {onde_cli-0.2.1 → onde_cli-0.3.1}/.github/workflows/release-homebrew.yml +1 -1
  7. {onde_cli-0.2.1 → onde_cli-0.3.1}/.github/workflows/release-npm.yml +7 -7
  8. onde_cli-0.3.1/.github/workflows/release-nuget.yml +305 -0
  9. onde_cli-0.3.1/.github/workflows/release-pub.yml +241 -0
  10. {onde_cli-0.2.1 → onde_cli-0.3.1}/.github/workflows/release-pypi.yml +5 -5
  11. onde_cli-0.3.1/.gitignore +17 -0
  12. onde_cli-0.3.1/.nuget/NuGet/NuGet.Config +6 -0
  13. {onde_cli-0.2.1 → onde_cli-0.3.1}/Cargo.lock +3380 -156
  14. {onde_cli-0.2.1 → onde_cli-0.3.1}/Cargo.toml +3 -1
  15. onde_cli-0.3.1/PKG-INFO +254 -0
  16. onde_cli-0.3.1/README.md +182 -0
  17. {onde_cli-0.2.1 → onde_cli-0.3.1}/build.rs +5 -6
  18. onde_cli-0.3.1/npm/README.md.tmpl +32 -0
  19. onde_cli-0.3.1/npm/onde-cli/README.md +153 -0
  20. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/onde-cli/package-lock.json +8 -8
  21. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/onde-cli/src/index.ts +4 -4
  22. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/scripts/render-main-package.cjs +2 -2
  23. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/scripts/render-platform-package.cjs +4 -4
  24. onde_cli-0.3.1/nuget/.gitignore +5 -0
  25. onde_cli-0.3.1/nuget/onde-cli/Onde.Cli.csproj +26 -0
  26. onde_cli-0.3.1/nuget/onde-cli/Program.cs +109 -0
  27. onde_cli-0.3.1/nuget/onde-cli/README.md +55 -0
  28. onde_cli-0.3.1/pub/onde_cli/.gitignore +2 -0
  29. onde_cli-0.3.1/pub/onde_cli/.pubignore +2 -0
  30. onde_cli-0.3.1/pub/onde_cli/CHANGELOG.md +7 -0
  31. onde_cli-0.3.1/pub/onde_cli/LICENSE +201 -0
  32. onde_cli-0.3.1/pub/onde_cli/README.md +48 -0
  33. onde_cli-0.3.1/pub/onde_cli/bin/onde.dart +13 -0
  34. onde_cli-0.3.1/pub/onde_cli/lib/onde_cli.dart +99 -0
  35. onde_cli-0.3.1/pub/onde_cli/pubspec.yaml +21 -0
  36. onde_cli-0.3.1/pypi/README.md +226 -0
  37. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/app.rs +570 -16
  38. onde_cli-0.3.1/src/chat.rs +330 -0
  39. onde_cli-0.3.1/src/main.rs +110 -0
  40. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/ui.rs +432 -85
  41. onde_cli-0.2.1/.gitignore +0 -3
  42. onde_cli-0.2.1/PKG-INFO +0 -169
  43. onde_cli-0.2.1/README.md +0 -121
  44. onde_cli-0.2.1/npm/README.md.tmpl +0 -27
  45. onde_cli-0.2.1/npm/onde-cli/README.md +0 -79
  46. onde_cli-0.2.1/pypi/README.md +0 -141
  47. onde_cli-0.2.1/src/main.rs +0 -54
  48. {onde_cli-0.2.1 → onde_cli-0.3.1}/.nvmrc +0 -0
  49. {onde_cli-0.2.1 → onde_cli-0.3.1}/LICENSE +0 -0
  50. {onde_cli-0.2.1 → onde_cli-0.3.1}/assets/ondeinference-apps.png +0 -0
  51. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/onde-cli/.gitignore +0 -0
  52. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/onde-cli/package.json +0 -0
  53. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/onde-cli/tsconfig.json +0 -0
  54. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/package-main.json.tmpl +0 -0
  55. {onde_cli-0.2.1 → onde_cli-0.3.1}/npm/package.json.tmpl +0 -0
  56. {onde_cli-0.2.1 → onde_cli-0.3.1}/pypi/pyproject.toml +0 -0
  57. {onde_cli-0.2.1 → onde_cli-0.3.1}/pyproject.toml +0 -0
  58. {onde_cli-0.2.1 → onde_cli-0.3.1}/rust-toolchain.toml +0 -0
  59. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/finetune.rs +0 -0
  60. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/gguf.rs +0 -0
  61. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/gresiq.rs +0 -0
  62. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/hf.rs +0 -0
  63. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/hf_clone.rs +0 -0
  64. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/hf_search.rs +0 -0
  65. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/hf_upload.rs +0 -0
  66. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/merge.rs +0 -0
  67. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/project.rs +0 -0
  68. {onde_cli-0.2.1 → onde_cli-0.3.1}/src/token.rs +0 -0
@@ -0,0 +1,226 @@
1
+ ---
2
+ name: distribution
3
+ description: Use when adding, fixing, or documenting package distribution for Onde CLI. Covers wrapper-package design across npm, PyPI, NuGet, pub.dev, GitHub Releases, and Homebrew, plus version alignment, artifact staging, README surfaces, and smoke-test strategy.
4
+ ---
5
+
6
+ # Onde CLI distribution
7
+
8
+ This skill captures how `onde-cli` is distributed today and what to watch when adding new channels.
9
+
10
+ ## Distribution model
11
+
12
+ `onde-cli` is a native Rust CLI first.
13
+
14
+ Everything else is packaging.
15
+
16
+ That means:
17
+
18
+ - build the Rust binary once per target
19
+ - publish thin wrappers that install or launch that binary
20
+ - keep channel-specific logic small and predictable
21
+
22
+ This design keeps behavior consistent across ecosystems and avoids re-implementing CLI logic in each language.
23
+
24
+ ## Channel map
25
+
26
+ ### Native source of truth
27
+
28
+ - Rust crate: `onde-cli`
29
+ - binary name: `onde`
30
+ - root manifest: `Cargo.toml`
31
+
32
+ ### Wrapper channels
33
+
34
+ - npm: JavaScript launcher + optional platform packages
35
+ - PyPI: `maturin` binary wheels
36
+ - NuGet: .NET global tool launcher
37
+ - pub.dev: Dart launcher package
38
+
39
+ ### Native artifact channels
40
+
41
+ - crates.io
42
+ - GitHub Releases
43
+ - Homebrew
44
+
45
+ ## Wrapper design patterns
46
+
47
+ ### npm
48
+
49
+ Use a very small Node launcher that:
50
+
51
+ - detects OS and architecture
52
+ - resolves the installed platform package
53
+ - spawns the binary with inherited stdio
54
+
55
+ Good fit for users who already live in npm tooling.
56
+
57
+ Important release detail:
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`
62
+ - the actual npm version comes from the release tag via `RELEASE_VERSION`, not from manually editing the committed npm manifest before publish
63
+
64
+ ### PyPI
65
+
66
+ Use `maturin` with `bindings = "bin"` so the native executable is what gets installed.
67
+
68
+ Good fit for Python users who want the CLI but not a Python reimplementation.
69
+
70
+ ### NuGet
71
+
72
+ Use a `.NET global tool` wrapper.
73
+
74
+ Important details:
75
+
76
+ - keep the package as a launcher, not a managed rewrite
77
+ - place native binaries under the tool payload
78
+ - resolve the runtime identifier at startup
79
+ - set Unix execute bits before launch
80
+
81
+ Good fit for .NET developers and CI environments that already use `dotnet tool install`.
82
+
83
+ ### pub.dev
84
+
85
+ Use a Dart package with a command entrypoint and a library that launches the bundled native binary.
86
+
87
+ Important details:
88
+
89
+ - executable command should stay `onde`
90
+ - use `Isolate.resolvePackageUri` to find the installed package path
91
+ - keep the runtime-id mapping explicit
92
+ - do not overcomplicate the wrapper with platform-specific Dart APIs unless necessary
93
+
94
+ Good fit for Dart and Flutter developers who want the same CLI through familiar tooling.
95
+
96
+ ## Runtime identifier mapping
97
+
98
+ Keep these names aligned anywhere wrappers or workflows refer to native assets:
99
+
100
+ - `darwin-x64`
101
+ - `darwin-arm64`
102
+ - `linux-x64`
103
+ - `linux-arm64`
104
+ - `windows-x64`
105
+ - `windows-arm64`
106
+
107
+ If a wrapper uses one naming scheme and a workflow uploads another, the installed package will pass packaging but fail at runtime.
108
+
109
+ ## Release workflow principles
110
+
111
+ ### Build first, package second
112
+
113
+ Always build native binaries in a target matrix first.
114
+
115
+ Then let the wrapper channel jobs package those artifacts.
116
+
117
+ This avoids rebuilding the product multiple times and makes failures easier to reason about.
118
+
119
+ ### Idempotency
120
+
121
+ Every publish workflow should check whether the target version already exists before publishing.
122
+
123
+ Examples:
124
+
125
+ - npm: `npm view`
126
+ - PyPI: package JSON endpoint
127
+ - NuGet: flat container index
128
+ - pub.dev: package API endpoint
129
+
130
+ ### Smoke tests should match the product shape
131
+
132
+ Because `onde` is TUI-first, avoid smoke tests that assume a traditional CLI help flow unless you know that code path is stable and non-interactive.
133
+
134
+ Safer checks:
135
+
136
+ - install succeeds
137
+ - bundled native binary exists where expected
138
+ - package manager validation passes
139
+
140
+ ## pub.dev-specific notes
141
+
142
+ pub.dev behaves differently from npm and NuGet in one important way:
143
+
144
+ - files ignored by git are generally excluded from publish input
145
+
146
+ That means staged native binaries for `pub/onde_cli/native/` must be available to the package at publish time.
147
+
148
+ Two practical consequences:
149
+
150
+ - do not ignore `pub/onde_cli/native/` in the root `.gitignore` if CI stages binaries there
151
+ - a `.pubignore` can hide local tool noise, but do not hide the native payload you intend to publish
152
+
153
+ Run these during verification:
154
+
155
+ - `dart pub get --directory pub/onde_cli`
156
+ - `dart analyze pub/onde_cli`
157
+ - `dart pub publish --dry-run --directory pub/onde_cli`
158
+
159
+ ## NuGet-specific notes
160
+
161
+ NuGet packaging is sensitive to path layout.
162
+
163
+ The safest pattern is:
164
+
165
+ - copy native files into the publish output
166
+ - let the .NET tool pack process carry them into the final package
167
+
168
+ Avoid custom `PackagePath` patterns that can duplicate path segments or create nested native folders by accident.
169
+
170
+ If the tool installs but cannot find the native binary, inspect the `.nupkg` contents before debugging the launcher.
171
+
172
+ ## README surfaces
173
+
174
+ Every user-facing channel should document the same product with channel-specific installation instructions.
175
+
176
+ Main files:
177
+
178
+ - `README.md`
179
+ - `npm/onde-cli/README.md`
180
+ - `pypi/README.md`
181
+ - `nuget/onde-cli/README.md`
182
+ - `pub/onde_cli/README.md`
183
+
184
+ Keep these aligned on:
185
+
186
+ - product description
187
+ - supported platforms
188
+ - install method
189
+ - license and copyright
190
+ - relevant supporting links like the forward-pass explainer
191
+
192
+ Do not let one channel sound like a different product.
193
+
194
+ ## Version alignment
195
+
196
+ When cutting a release, update every user-facing distribution version that should move with the CLI.
197
+
198
+ At minimum, check:
199
+
200
+ - Rust crate version
201
+ - npm release templates and workflow assumptions
202
+ - npm lockfile version if committed
203
+ - PyPI release version source
204
+ - NuGet package version at pack time
205
+ - pub.dev package version in `pubspec.yaml`
206
+ - workflow example tags and docs that mention concrete versions
207
+
208
+ ## Common failure modes
209
+
210
+ - wrapper version does not match the Rust release version
211
+ - manually bumping the committed npm manifest and assuming that is what npm publishes
212
+ - staged native binaries land in the wrong directory before packaging
213
+ - package builds successfully but installs without the native binary
214
+ - pub.dev package omits staged assets because gitignore excludes them
215
+ - smoke test invokes a TUI-first binary in a way that does not make sense for CI
216
+ - README badges and install commands drift out of sync with real package names
217
+
218
+ ## Rule of thumb
219
+
220
+ If the native binary works and the wrappers are boring, distribution stays manageable.
221
+
222
+ If a wrapper starts acting like its own product, complexity grows fast.
223
+
224
+ Keep it thin.
225
+ Keep it aligned.
226
+ Keep the Rust binary as the source of truth.
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: git
3
+ description: Git workflow rules for this repository.
4
+ allowed-tools: Read, Write, Edit, Glob, Grep, AskUserQuestion
5
+ user-invocable: true
6
+ ---
7
+
8
+ # Git skill
9
+
10
+ ## Core rule
11
+
12
+ - Use `--no-ff`. Important.
13
+
14
+ ## What this means in practice
15
+
16
+ - Do not fast-forward merge feature branches, release branches, or hotfix branches.
17
+ - Prefer explicit merge commits so the branch history stays visible.
18
+ - If release prep happens on a branch, merge it into `main` with `--no-ff` before tagging.
19
+ - Tag the merge commit that contains the final release state.
20
+
21
+ ## Release guidance
22
+
23
+ For releases, prefer a flow like this:
24
+
25
+ ```bash
26
+ git checkout main
27
+ git merge --no-ff <release-branch> -m "Merge release prep for vX.Y.Z"
28
+ git tag vX.Y.Z
29
+ git push origin main
30
+ git push origin vX.Y.Z
31
+ ```
32
+
33
+ If the work is already on `main`, make a normal commit and tag that commit. Do not rewrite history just to avoid a merge commit.
34
+
35
+ ## Avoid
36
+
37
+ - `git merge --ff`
38
+ - `git pull --ff-only` as a default recommendation for this repo's merge policy
39
+ - Tagging a branch tip that has not been merged into `main` when the intended release source of truth is `main`
40
+
41
+ ## Why
42
+
43
+ The repo wants explicit history. Release commits should be easy to find, easy to audit, and clearly connected to the branch that introduced them.
@@ -108,9 +108,42 @@ jobs:
108
108
  GRESIQ_API_SECRET: ${{ secrets.GRESIQ_API_SECRET }}
109
109
  HF_TOKEN: ${{ secrets.HF_TOKEN }}
110
110
 
111
+ dotnet-tool:
112
+ name: .NET tool launcher build
113
+ runs-on: ubuntu-latest
114
+ steps:
115
+ - name: Checkout
116
+ uses: actions/checkout@v6
117
+
118
+ - name: Setup .NET SDK
119
+ uses: actions/setup-dotnet@v4
120
+ with:
121
+ dotnet-version: 8.0.x
122
+
123
+ - name: Build .NET tool launcher
124
+ run: dotnet build nuget/onde-cli/Onde.Cli.csproj --configuration Release
125
+
126
+ dart-package:
127
+ name: Dart pub package check
128
+ runs-on: ubuntu-latest
129
+ steps:
130
+ - name: Checkout
131
+ uses: actions/checkout@v6
132
+
133
+ - name: Setup Dart SDK
134
+ uses: dart-lang/setup-dart@v1
135
+
136
+ - name: Get package dependencies
137
+ working-directory: pub/onde_cli
138
+ run: dart pub get
139
+
140
+ - name: Analyze Dart package
141
+ working-directory: pub/onde_cli
142
+ run: dart analyze
143
+
111
144
  build:
112
145
  name: Build (aarch64-apple-darwin)
113
- runs-on: macos-latest
146
+ runs-on: macos-26
114
147
  steps:
115
148
  - name: Checkout
116
149
  uses: actions/checkout@v6
@@ -140,13 +173,17 @@ jobs:
140
173
  - clippy
141
174
  - test
142
175
  - check
176
+ - dotnet-tool
177
+ - dart-package
143
178
  - build
144
179
  if: always()
145
180
  steps:
146
181
  - name: Verify all required jobs succeeded
147
182
  run: |
148
- test "${{ needs.fmt.result }}" = "success"
149
- test "${{ needs.clippy.result }}" = "success"
150
- test "${{ needs.test.result }}" = "success"
151
- test "${{ needs.check.result }}" = "success"
152
- test "${{ needs.build.result }}" = "success"
183
+ test "${{ needs.fmt.result }}" = "success"
184
+ test "${{ needs.clippy.result }}" = "success"
185
+ test "${{ needs.test.result }}" = "success"
186
+ test "${{ needs.check.result }}" = "success"
187
+ test "${{ needs.dotnet-tool.result }}" = "success"
188
+ test "${{ needs.dart-package.result }}" = "success"
189
+ test "${{ needs.build.result }}" = "success"
@@ -102,20 +102,3 @@ jobs:
102
102
  env:
103
103
  CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
104
104
  run: cargo publish --locked
105
-
106
- github-release:
107
- name: Create GitHub release
108
- runs-on: ubuntu-latest
109
- needs:
110
- - verify
111
- - publish
112
- if: github.event_name == 'push'
113
- permissions:
114
- contents: write
115
- steps:
116
- - name: Create release
117
- uses: softprops/action-gh-release@v2
118
- with:
119
- tag_name: v${{ needs.verify.outputs.version }}
120
- generate_release_notes: true
121
- name: onde-cli v${{ needs.verify.outputs.version }}
@@ -7,7 +7,7 @@ on:
7
7
  workflow_dispatch:
8
8
  inputs:
9
9
  tag:
10
- description: "Release tag (e.g. v0.1.1)"
10
+ description: "Release tag (e.g. v0.3.1)"
11
11
  required: true
12
12
 
13
13
  permissions:
@@ -45,10 +45,10 @@ jobs:
45
45
  runner: windows-latest
46
46
  target: aarch64-pc-windows-msvc
47
47
  - name: macos-amd64
48
- runner: macos-15-intel
48
+ runner: macos-26-intel
49
49
  target: x86_64-apple-darwin
50
50
  - name: macos-arm64
51
- runner: macos-latest
51
+ runner: macos-26
52
52
  target: aarch64-apple-darwin
53
53
 
54
54
  steps:
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
  inputs:
6
6
  tag:
7
- description: "Release tag (e.g. v0.1.1)"
7
+ description: "Release tag (e.g. v0.3.1)"
8
8
  required: true
9
9
 
10
10
  permissions:
@@ -7,7 +7,7 @@ on:
7
7
  workflow_dispatch:
8
8
  inputs:
9
9
  tag:
10
- description: "Release tag (e.g. v0.2.0)"
10
+ description: "Release tag (e.g. v0.3.1)"
11
11
  required: true
12
12
 
13
13
  permissions:
@@ -52,14 +52,10 @@ jobs:
52
52
  }
53
53
  - {
54
54
  NAME: darwin-x64,
55
- OS: macos-15-intel,
55
+ OS: macos-26-intel,
56
56
  TARGET: x86_64-apple-darwin,
57
57
  }
58
- - {
59
- NAME: darwin-arm64,
60
- OS: macos-latest,
61
- TARGET: aarch64-apple-darwin,
62
- }
58
+ - { NAME: darwin-arm64, OS: macos-26, TARGET: aarch64-apple-darwin }
63
59
 
64
60
  steps:
65
61
  - name: Checkout
@@ -115,6 +111,8 @@ jobs:
115
111
  registry-url: "https://registry.npmjs.org"
116
112
 
117
113
  - name: Publish platform package to NPM
114
+ env:
115
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
118
116
  shell: bash
119
117
  run: |
120
118
  cd npm
@@ -198,6 +196,8 @@ jobs:
198
196
  registry-url: "https://registry.npmjs.org"
199
197
 
200
198
  - name: Publish base package to NPM
199
+ env:
200
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
201
201
  shell: bash
202
202
  run: |
203
203
  cd npm/onde-cli