## Summary
- **Configurable LLM canister in `ic-llm` (1.2.0).** Because `icp-cli`
doesn't support installing canisters with a specified ID, the library
can no longer hardcode the LLM canister's principal. `ChatBuilder` gains
`.with_canister(Principal)`; the default now reads
`PUBLIC_CANISTER_ID:llm` at call time and falls back to mainnet
`w36hm-…`. Bumped `ic-cdk` to `0.20.1` (which removed the legacy
`api::call` module, so `chat.rs` is rewritten to the `Call` builder
API). Bumped MSRV to Rust 1.94.
- **Unified toolchain with mise + pnpm.** New `mise.toml` pins Rust,
pnpm, and Node; new root `package.json` installs `@icp-sdk/icp-cli` and
`@icp-sdk/ic-wasm` as devDependencies (exposed on PATH via mise's
`_.path`). CI replaces `actions-rs/toolchain` + `pnpm/action-setup` +
`actions/setup-node` with a single `jdx/mise-action@v3` step.
`rust-toolchain.toml` removed.
- **`examples/quickstart-agent-rust` ported from dfx to icp-cli.**
`dfx.json` → `icp.yaml` (Rust + asset-canister recipes; LLM canister
installed from the pre-built v0.3.1 release WASM). `dfx generate` →
`@icp-sdk/bindgen` Vite plugin writing to `src/bindings`. Frontend
resolves canister IDs via `getCanisterEnv` from `@icp-sdk/core` + an
`ic_env` cookie set by `vite.config.js` in dev. Mainnet IDs preserved in
`.icp/data/mappings/ic.ids.json` (per the skills-site convention). The
other 4 examples are out of scope and stay on dfx until a follow-up.