Repository navigation
feat: initial slack-cli MVP - #1
Conversation
Single-commit consolidation of three working branches that had grown out of the original repository's brainstorm → design → implementation → readme polish → CI bootstrap sequence: - develop full MVP implementation - feature/readme-positioning drop jira-cli influence framing - fix/ci-bootstrap CI workflow + dev-tool fixes Highlights: * Rust 1.89 (MSRV) single-crate CLI, tokio current_thread, reqwest direct calls to Slack Web API (no SDK). * `noun → verb` command tree: auth / channel / message / search / user / file / completion. * Stable JSON envelope `slack-cli/v0` with `--dry-run` payload, structured `Hint` for agents, and exit-code map. * TokenStore: OS keychain (default), file (0600 on unix), or env; Windows disables the file backend. * Resolver with 60s in-process cache and ambiguity detection (channel + user). * 3-layer test pyramid: 59 lib unit tests, 9 integration tests via wiremock + assert_cmd + insta. * CI matrix: ubuntu/macos/windows + msrv + linux-headless + deny; release.yml builds 6 targets (linux-musl/macos/windows-msvc × x86_64/aarch64) with SHA256 sums and git-cliff changelog. * Dev tooling pinned via mise (rust default profile + ubi for cargo-insta/cargo-deny/git-cliff; cargo-nextest installed in CI via taiki-e/install-action). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (58)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Three remaining CI failures on the initial PR: 1. ubuntu test failed building libdbus-sys (transitive of keyring) — the test job had no libdbus install step. Add it (ubuntu-only). 2. macos test failed because mise's ubi backend hit anonymous GitHub API rate limits (403) when resolving cargo-deny / insta / git-cliff release lists. Wire `GITHUB_TOKEN` env into both mise-action steps so requests are authenticated. 3. windows test failed with `function ws is never used`: the file backend test (which is the only consumer of the `ws()` helper) is already #[cfg(not(target_os = "windows"))]. Gate the helper the same way. Local: cargo test/clippy/fmt all clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…port
- ubuntu: `cargo fmt --check` still failed because mise's rust backend
cached a minimal toolchain from the previous run; the
`profile = "default"` request in mise.toml does not retroactively
add components. Run `rustup component add rustfmt clippy` in CI so
the components are present regardless of cache state.
- windows: `use crate::config::{TokenSource, WorkspaceConfig, WorkspaceMeta}`
in `src/secret.rs::tests` was unused once `ws()` got cfg-gated.
Gate the import with the same `#[cfg(not(target_os = "windows"))]`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
What
リポジトリ再作成に合わせて、3 つの作業ブランチ(実装 / README ポジショニング / CI 修正)を 1 つの commit にまとめて main へ初投入します。
develop: MVP 実装一式(11 phase)feature/readme-positioning: README から jira-cli の参考由来表現を削除fix/ci-bootstrap: CI ワークフローと dev tool 周りの修正ファイル変更: 59 files / +12071 insertions(テスト fixture も含む)。
Why
旧リポジトリでは brainstorm → design → 11 phase 実装 → README 仕上げ → CI ブートストラップ の流れで commit を細かく積んだ結果、履歴がレビュー時に煩雑になっていたため、新リポジトリでは「ひとつの initial PR」として整理します。
How
主な要素:
アーキテクチャ
#[tokio::main(flavor = \"current_thread\")]reqwest+serdeで Slack Web API を直叩き(SDK 非採用)Result<T, CliError>一本(anyhow不使用)、exit code 9 種tabled+serde+Displayで出力レンダリングコマンド
```
slack-cli auth init | whoami | list | logout
slack-cli channel list | view | create | archive | invite | leave
slack-cli message list | view | send | reply | update | delete | react
slack-cli search messages | files
slack-cli user list | view
slack-cli file list | upload | download
slack-cli completion
```
JSON envelope
```json
{
"ok": true,
"schema": "slack-cli/v0",
"data": { ... },
"request_id": "req_..."
}
```
セキュリティ
--tokenフラグは作らない(argv 露出回避)。SLACK_CLI_TOKENenv /--token-stdinのみHeaderValue::set_sensitive(true)を Authorization に必須panic = \"abort\"テスト
wiremock+assert_cmd+instaCI / Release
msrv+linux-headless+cargo-denyTesting
mise exec -- cargo test→ 68 passed (59 lib + 9 integration)mise exec -- cargo clippy --all-targets -- -D warnings→ cleanmise exec -- cargo fmt --check→ cleanmise exec -- cargo deny check advisories bans licenses sources→ all okChecklist
--helpはすべて英語README.md(英語、primary)とREADME.ja.md(日本語)併設補足
docs/superpowers/specs/...とdocs/superpowers/plans/...は設計仕様書 / 実装プランの日本語ドキュメント。レビュー時に内部設計の参照に使えます。mise.tomlで rust default profile を指定(rustfmt / clippy 同梱)、cargo-nextest は CI でtaiki-e/install-action経由。🤖 Generated with Claude Code