Skip to content

Commit 7c8eac8

Browse files
committed
Release 0.1.9
1 parent 05c64a6 commit 7c8eac8

33 files changed

Lines changed: 622 additions & 106 deletions

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ Living plan (what’s next): [`doc/roadmap.md`](doc/roadmap.md).
1212

1313
## [Unreleased]
1414

15+
## [0.1.9] — 2026-09-10
16+
17+
Copilot rail can pick which Snowflake connections TOML to use.
18+
19+
### Added
20+
21+
- Copilot rail **Config file** + **Connection** selectboxes on one row — the connection popover lists `~/.snowflake/*.toml`. A single file is still listed (one option). `toml_file=` sets the default. Profile names come from the selected file. Helpers: `list_snowflake_connections()`, `list_snowflake_toml_files()`, `resolve_snowflake_config_path()`.
22+
1523
## [0.1.8.1] — 2026-09-07
1624

1725
Copilot rail starters can fill the chat input without sending.

ID.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
| **Asset Owner** | Laurent Letourmy — laurent.letourmy@devoteam.com |
1010
| **Contributors** | DevoteamSP / streamlit-coco contributors |
1111
| **Created** | 2026-07 |
12-
| **Last updated** | 2026-09-07 |
12+
| **Last updated** | 2026-09-10 |
1313
| **Confidentiality** | Public |
1414

1515
---
@@ -28,7 +28,7 @@
2828

2929
## Maturity Justification
3030

31-
**Current level**: N0 → closing alpha toward N1 (PyPI `0.1.8.1`)
31+
**Current level**: N0 → closing alpha toward N1 (PyPI `0.1.9`)
3232

3333
- Clients where used: 0 (alpha). Internal: Data Product Studio + Data Product Forge
3434
- Consultants trained: 0 additional. Enablement pack + workshop W01 shipped in `0.1.6`; registry `consultants_enabled: 1` is the asset owner.
@@ -42,7 +42,7 @@
4242
- [x] Consultant enablement pack (`doc/training/`) + workshop W01 (`0.1.6`)
4343
- [x] Owner + KPIs on this sheet
4444
- [x] Security threat model + audit pack (`doc/security/`) — SEC-01 / SEC-02 still open for v0.2
45-
- [x] Marketing one-pager (`doc/marketing/one-pager.md`) — refreshed for `0.1.8.1`
45+
- [x] Marketing one-pager (`doc/marketing/one-pager.md`) — refreshed for `0.1.9`
4646
- [ ] 1 additional consultant trained via W01 (pack exists; count still 0 beyond owner)
4747
- [ ] Remaining live UI checklists — core panel / approvals / tools / structured / CCv2 signed off; copilot-rail still pending
4848
- [ ] 2+ client usages

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ You own the page. CoCo owns the session. `copilot_rail()` sits in the product an
99

1010
![BI → Semantic — Preview of the generated Streamlit app beside the Copilot rail](doc/screenshot.png)
1111

12-
> Alpha `0.1.8.1` — API may still move. Star / watch the repo if you plan to ship on it.
12+
> Alpha `0.1.9` — API may still move. Star / watch the repo if you plan to ship on it.
1313
1414
**Repo:** [github.com/lletourmy/streamlit-coco](https://github.com/lletourmy/streamlit-coco) *(temporary PyPI source)* · **Dev:** [streamlit-coco-dev](https://github.com/DevoteamSP/streamlit-coco-dev)
1515
**SDK docs:** [Cortex Code Agent SDK](https://docs.snowflake.com/en/user-guide/cortex-code-agent-sdk/cortex-code-agent-sdk)
@@ -37,7 +37,7 @@ Also: headless `query()` for scripts and CI, plus a legacy all-in-one `chat()` i
3737
- **You need Slack, a hosted CoCo SaaS, or a product MCP server.** Out of scope. MCP *passthrough* via `mcp_servers` already works.
3838
- **You would not type the SQL yourself on this role.** The agent uses the Snowflake role in the connection — do not wire `ACCOUNTADMIN` into a web UI.
3939

40-
Alpha `0.1.8.1` — APIs may still move. Prefer `panel()` + your own input; `chat()` is the legacy all-in-one.
40+
Alpha `0.1.9` — APIs may still move. Prefer `panel()` + your own input; `chat()` is the legacy all-in-one.
4141

4242
---
4343

@@ -172,7 +172,7 @@ Legacy `chat()` is the same session, with a CCv2 frontend instead of native widg
172172
| Capability | Entry points |
173173
| --- | --- |
174174
| Native panel + approvals | `panel()`, `chat_input_bar()`, `render_approvals()` |
175-
| Copilot rail (right-column Copilot) | `copilot_rail()`, `transcript_display_config()`, `example_questions=` / `deferred=`[`doc/features/copilot-rail/`](doc/features/copilot-rail/) |
175+
| Copilot rail (right-column Copilot) | `copilot_rail()`, `transcript_display_config()`, `example_questions=` / `deferred=` / `toml_file=` [`doc/features/copilot-rail/`](doc/features/copilot-rail/) |
176176
| App viewer (child Streamlit iframe) | `app_viewer()`, `default_fix_prompt()`[`doc/features/app-viewer/`](doc/features/app-viewer/) |
177177
| Tool cards & AskUser / plan UI | see [`doc/features/tools-display/`](doc/features/tools-display/) |
178178
| Session & options | `CocoSession`, `CocoOptions`, `get_or_create_session` |

doc/api.md

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# API reference — streamlit-coco
22

33
Public surface exported from `import streamlit_coco as st_coco`.
4-
Alpha `0.1.8.1` — signatures may still move; prefer this page over the PRD sketch.
4+
Alpha `0.1.9` — signatures may still move; prefer this page over the PRD sketch.
55

66
**Related:** [README quickstart](../README.md) · [Local deployment](deployment/local.md) · [Feature docs](features/README.md) · [SDK docs](https://docs.snowflake.com/en/user-guide/cortex-code-agent-sdk/cortex-code-agent-sdk)
77

@@ -176,7 +176,8 @@ status card).
176176
| --- | --- | --- |
177177
| `session` || `CocoSession` or `None` until connected |
178178
| `connected` | `True` | Whether Connect has been confirmed |
179-
| `connections` | `None` | Snowflake connection names for the popover |
179+
| `connections` | `None` | Extra connection names prepended on the popover (e.g. from `st.secrets`). Profiles from the selected TOML always appear |
180+
| `toml_file` | `None` | Default for the **Config file** selectbox (beside **Connection** on one row). A bare name is looked up under `~/.snowflake/`; a path is used as given |
180181
| `on_connect` / `on_disconnect` | `None` | Callbacks; omit to hide the popover |
181182
| `job` | `None` | `{prompt, label, status, expect_structured, …}` |
182183
| `on_job_sent` | `None` | Called after a queued prompt is `session.send`'d |
@@ -288,7 +289,7 @@ Low-level resolve for custom approval UIs.
288289

289290
| Function | Role |
290291
| --- | --- |
291-
| `render_environment_status(env=None, *, connection=None, stacked=False, show_title=True)` | SDK / CLI / Snowflake probe UI |
292+
| `render_environment_status(env=None, *, connection=None, toml_file=None, stacked=False, show_title=True)` | SDK / CLI / Snowflake probe UI |
292293
| `render_start_gate(options, *, session_key=…, gate_key=…, warm_up=True, env=None) -> bool` | Landing screen; `False` → call `st.stop()` |
293294

294295
---
@@ -358,14 +359,26 @@ Flatten events for audit views (requires pandas).
358359

359360
## Environment & errors
360361

361-
### `check_environment(*, connection=None, cli_path=None) -> CocoEnvironment`
362+
### `check_environment(*, connection=None, cli_path=None, toml_file=None) -> CocoEnvironment`
362363

363364
Probe without starting an agent. Does not raise.
364365

365-
`CocoEnvironment` fields: `sdk_installed`, `sdk_version`, `cli_path`, `cli_version`, `snowflake_config_file`, `connection_hint`.
366-
Properties: `ready`, `cli_ok`, `snowflake_config_found`, `snowflake_config_display`.
366+
`CocoEnvironment` fields: `sdk_installed`, `sdk_version`, `cli_path`, `cli_version`, `snowflake_config_file`, `connection_hint`, `toml_file`.
367+
Properties: `ready`, `cli_ok`, `snowflake_config_found`, `snowflake_config_display`, `snowflake_config_missing_label`.
367368

368-
### `require_environment(*, connection=None, cli_path=None, require_snowflake_config=False) -> CocoEnvironment`
369+
`toml_file` is a Snowflake connections TOML filename under `~/.snowflake/` or a path. When omitted, the only `*.toml` in that directory is used whatever its name; if several exist, `connections.toml` is preferred, then `config.toml`.
370+
371+
### `list_snowflake_toml_files() -> list[Path]`
372+
373+
`*.toml` files under `~/.snowflake/`, with `connections.toml` then `config.toml` first, then the rest alphabetically.
374+
375+
### `list_snowflake_connections(toml_file=None) -> list[str]`
376+
377+
Connection profile names from that TOML. Bare names resolve under `~/.snowflake/`. Legacy `config.toml` is read from the `[connections]` table; other files use top-level tables.
378+
379+
Helpers: `resolve_snowflake_config_path(toml_file=None, *, must_exist=True)`, `default_snowflake_connection_name(toml_file=None)`.
380+
381+
### `require_environment(*, connection=None, cli_path=None, toml_file=None, require_snowflake_config=False) -> CocoEnvironment`
369382

370383
Like `check_environment`, but raises typed errors when SDK/CLI (and optionally Snowflake config) are missing.
371384

@@ -406,7 +419,7 @@ Tool card UX: [`features/tools-display/SPEC.md`](features/tools-display/SPEC.md)
406419
## Package metadata
407420

408421
```python
409-
st_coco.__version__ # e.g. "0.1.8.1"
422+
st_coco.__version__ # e.g. "0.1.9"
410423
```
411424

412425
Private modules (`bridge`, `tool_cards`, `tool_extract`, …) are implementation details and are not part of the stable public surface.

doc/deployment/publish.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ cp -R doc-dev/releases/_template/. "doc-dev/releases/${VER}/"
5050
```
5151

5252
- Public checklist: [`doc/releases/`](../releases/README.md)`doc/releases/X.Y.Z/CHECKLIST.md`
53-
(current: [`doc/releases/0.1.8.1/`](../releases/0.1.8.1/))
53+
(current: [`doc/releases/0.1.9/`](../releases/0.1.9/))
5454
- Outreach (LinkedIn / Medium / community): [`doc-dev/releases/`](../../doc-dev/releases/README.md)
55-
(current: [`doc-dev/releases/0.1.8.1/`](../../doc-dev/releases/0.1.8.1/)) — **never synced** to the public repo
55+
(current: [`doc-dev/releases/0.1.9/`](../../doc-dev/releases/0.1.9/)) — **never synced** to the public repo
5656

5757
```bash
5858
make test-all

doc/features/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Exploratory prompts: [`examples/testdata/`](../../examples/testdata/).
4242
| UI golden path — tools-display | **Pass (core)** (2026-07-27) | [`tools-display/test-checklist.md`](tools-display/test-checklist.md) — Glob/Grep/Read/Write/Edit live; SQL/AskUser/plan/debug deferred |
4343
| UI golden path — structured-output | **Pass (core)** (2026-07-27) | [`structured-output/test-checklist.md`](structured-output/test-checklist.md)`make structured` + `output_schema` live |
4444
| UI golden path — chat-ccv2 | **Pass** (2026-07-27) | [`chat-ccv2/test-checklist.md`](chat-ccv2/test-checklist.md)`make approval` live |
45-
| UI golden path — copilot-rail | **Pending** (`0.1.8.1` deferred step) | [`copilot-rail/test-checklist.md`](copilot-rail/test-checklist.md)`make bi-semantic` (step 2b-deferred) |
45+
| UI golden path — copilot-rail | **Pending** (`0.1.9` Config file row) | [`copilot-rail/test-checklist.md`](copilot-rail/test-checklist.md)`make app-builder` (step 1a) |
4646
| UI golden path — app-viewer | **Pending** (`0.1.7`) | [`app-viewer/test-checklist.md`](app-viewer/test-checklist.md)`make bi-semantic` |
4747
| UI golden path — app-builder | **Automated** (`0.1.8`) | [`app-builder/test-checklist.md`](app-builder/test-checklist.md)`make test-all` 2026-09-06; live CoCo sign-off still open |
4848

doc/features/copilot-rail/copilot-rail.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Reusable right-rail Copilot for Streamlit apps: connection, queued jobs,
44
transcript compactness, `panel()`, and `chat_input_bar()`.
55

6-
**Status:** Shipped in **`0.1.6`**. Example questions + Display config popover in **`0.1.8`**. `deferred=` example questions in **`0.1.8.1`**.
6+
**Status:** Shipped in **`0.1.6`**. Example questions + Display config popover in **`0.1.8`**. `deferred=` example questions in **`0.1.8.1`**. Config file picker / `toml_file=` in **`0.1.9`**.
77

88
## What
99

@@ -43,7 +43,7 @@ session = st_coco.get_or_create_session(opts, key="copilot")
4343
st_coco.copilot_rail(
4444
session,
4545
connected=True,
46-
connections=["analytics"],
46+
toml_file="connections.toml",
4747
connection_name="analytics",
4848
on_connect=lambda name: ...,
4949
on_disconnect=lambda: ...,
@@ -88,6 +88,13 @@ not run it — the user can edit, then submit. Starters disappear once a turn
8888
starts, the chat has a user or assistant message, or a job is present, and
8989
return after **Clear chat**. A deferred click does not hide them.
9090

91+
Pass **`toml_file=`** to set the default Snowflake connections file. The
92+
connection popover puts **Config file** and **Connection** selectboxes on
93+
one row. A single ``~/.snowflake/*.toml`` is still listed (one option);
94+
several files are all listed. Profile names always come from the selected
95+
file. ``connections=`` extra names are prepended (for example from
96+
``st.secrets``). The environment probe shows the selected file.
97+
9198
## Limitations
9299

93100
- Callers still own session lifecycle (reset on cwd / schema change).
@@ -96,7 +103,7 @@ return after **Clear chat**. A deferred click does not hide them.
96103
`panel()` still has its own streaming fragment so the icon stays clickable
97104
while CoCo runs.
98105
- Tool cards are not character-truncated (they are already compact expanders).
99-
- Version tag for this API is **`0.1.8.1`** (`pip install "streamlit-coco[sdk]==0.1.8.1"`). Rail chrome shipped in `0.1.6`; example questions in `0.1.8`; `deferred=` in `0.1.8.1`.
106+
- Version tag for this API is **`0.1.9`** (`pip install "streamlit-coco[sdk]==0.1.9"`). Rail chrome shipped in `0.1.6`; example questions in `0.1.8`; `deferred=` in `0.1.8.1`; Config file picker in `0.1.9`.
100107

101108
## Related
102109

doc/features/copilot-rail/test-checklist.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
| # | Step | Expected |
1616
| --- | --- | --- |
1717
| 1 | Open an app that mounts `copilot_rail` disconnected | Connection popover; no session |
18+
| 1a | Open Connection | **Config file** and **Connection** selectboxes sit on one row. One `~/.snowflake/*.toml` → one config option; several → pick among them. Profiles and the environment probe follow the selected file |
1819
| 2 | Connect | Environment status; Copilot ready caption. If the app passed `example_questions`, starter buttons appear under the empty transcript (title on the button) |
1920
| 2a | Hover a starter button | Tooltip shows the **question** text (not just the title) |
2021
| 2b | Click a starter | The question is sent as a user turn; starters hide; CoCo runs |

doc/marketing/demo.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109
| Does it work with SiS? | Not yet — pure Python, waiting for the CoCo API |
110110
| What LLM does it use? | Whatever Cortex Code uses (Claude, ChatGPT...) — no config needed |
111111
| Can I customize which tools need approval? | Yes — `permission_mode` in `CocoOptions` |
112-
| Is it production-ready? | Alpha (`0.1.8.1`) — use in internal tools today, production after N1 |
112+
| Is it production-ready? | Alpha (`0.1.9`) — use in internal tools today, production after N1 |
113113

114114
---
115115

doc/marketing/one-pager.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Teams building Streamlit apps on Snowflake need AI-assisted data exploration, co
1717
| Capability | What it does |
1818
|-----------|--------------|
1919
| `panel()` | Streaming agent transcript with tool cards (SQL, Read, Write, Grep) |
20-
| `copilot_rail()` | Right-rail Copilot: connection, queued jobs, compact transcript; `example_questions=` / `deferred=` (`0.1.8` / `0.1.8.1`) |
20+
| `copilot_rail()` | Right-rail Copilot: connection, queued jobs, compact transcript; `example_questions=` / `deferred=` / `toml_file=` (`0.1.8` / `0.1.8.1` / `0.1.9`) |
2121
| `app_viewer()` | Child Streamlit process + iframe + **Fix with CoCo** (`0.1.7`) |
2222
| App Builder | Type library → brief → CoCo Write → Preview (`0.1.8`, `make app-builder`) |
2323
| Approval gates | Human-in-the-loop pause before destructive tools execute |
@@ -81,7 +81,7 @@ streamlit run app.py
8181

8282
| | |
8383
|---|---|
84-
| **Level** | N0 (Alpha `0.1.8.1`) — targeting N1 |
84+
| **Level** | N0 (Alpha `0.1.9`) — targeting N1 |
8585
| **License** | Apache-2.0 |
8686
| **Owner** | Laurent Letourmy — Devoteam Snowflake Partner |
8787
| **Repo** | [github.com/DevoteamSP/streamlit-coco](https://github.com/DevoteamSP/streamlit-coco) |

0 commit comments

Comments
 (0)