Skip to content

Commit b0d0972

Browse files
committed
Release 0.1.8
1 parent 22d20a2 commit b0d0972

110 files changed

Lines changed: 6768 additions & 188 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ examples/workspaces/
2626
examples/bi_to_semantic/out/
2727
examples/bi_to_semantic/uv.lock
2828

29-
# Optional Power BI samples (~17 MB) — fetch with examples/powerbi_legacy/fetch.sh
30-
examples/powerbi_legacy/Human Resources Sample PBIX.pbix
31-
examples/powerbi_legacy/Employee Hiring and History.pbix
29+
# App Builder generated artifacts
30+
examples/app_builder/out/
31+
32+
# Optional Power BI samples (~17 MB) — fetch with examples/bi_samples/powerbi/fetch.sh
33+
examples/bi_samples/powerbi/Human Resources Sample PBIX.pbix
34+
examples/bi_samples/powerbi/Employee Hiring and History.pbix

AGENTS.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Pinned rule: `.cursor/rules/coco-sdk-docs.mdc`
1212
## Layout
1313

1414
- `streamlit_coco/` — library (`ui`, `rail`, `viewer`, `app_preview`, `session`, `permissions`, `tool_*`, `bootstrap`, …)
15-
- `examples/` — chat, approval, structured, headless, backlog desk, BI → Semantic
15+
- `examples/` — chat, approval, structured, headless, backlog desk, BI → Semantic, App Builder
1616
- `apps/`**dev-only** full applications (never synced to public `streamlit-coco`)
1717
- `doc/prd.md`, `doc/api.md`, `doc/roadmap.md`, `doc/features/` — product + API + DSP N1 feature docs/checklists
1818
- `doc/releases/X.Y.Z/` — public release kit (checklist, screenshots)
@@ -32,6 +32,7 @@ make audit # pip-audit
3232
make test-all # check + e2e + audit
3333
make chat # Streamlit demo
3434
make bi-semantic # Tableau / Power BI → Semantic example (copilot rail)
35+
make app-builder # App Builder (type library → brief → Preview)
3536
make adoption-stats # daily PyPI + GitHub traffic → doc-dev/metrics/
3637
```
3738

@@ -45,7 +46,7 @@ Full test process: [`doc/testing.md`](doc/testing.md).
4546
- Approval buttons left→right: Approve once · Always allow · Deny.
4647
- AskUserQuestion / ExitPlanMode always go through pending HITL; never “Always allow”.
4748
- Update `CHANGELOG.md` `[Unreleased]` for user-visible changes; update feature checklists when UX changes.
48-
- **Before cutting a release:** complete `doc/releases/X.Y.Z/CHECKLIST.md` + outreach in `doc-dev/releases/X.Y.Z/`, then `doc/deployment/publish.md`. Do not tag until the public kit docs/QA sections are done.
49+
- **Before cutting a release:** complete `doc/releases/X.Y.Z/CHECKLIST.md` + outreach in `doc-dev/releases/X.Y.Z/`, then `doc/deployment/publish.md`. Do not tag until the public kit docs/QA sections are done. Sync [public GitHub issues](https://github.com/DevoteamSP/streamlit-coco/issues): close resolved, comment on progressed, propose new ones from `doc/roadmap.md`.
4950
- Prefer small, focused diffs; no drive-by refactors.
5051

5152
## Testing

CHANGELOG.md

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

1313
## [Unreleased]
1414

15+
## [0.1.8] — 2026-09-06
16+
17+
App Builder for business users, plus rail starter questions and Display config.
18+
19+
### Added
20+
21+
- Copilot rail **example questions**`copilot_rail(example_questions=…)` shows starter buttons after Connect on an empty transcript. Each item is `{title, question}`: the title is the button label, hover shows the question, click sends that text to CoCo. They hide once a user/assistant turn or a queued job is present (and come back after **Clear chat**). App Builder and BI → Semantic pass a short set.
22+
- **App Builder** example (`examples/app_builder`, `make app-builder`) — type library with **topic pills**, local types that need **no Snowflake** (CSV explorer, call transcription, meeting recap, prompt library), filled brief, demo scaffold or CoCo Write, Preview via `app_viewer()`.
23+
- App Builder **profile step** — dropping the KPI presentation demo fixture runs a deterministic pandas profile (`engine/profile.py`, no CoCo) and pre-fills metrics / grain / filters as findings to confirm. Audience and must-not stay blank (only a person can answer them). Library cards and the Brief chrome show a **grounding** pill (Files / Semantic view / Documents / URLs).
24+
- App Builder chrome — pages **Welcome · Library · Brief · Studio · Admin**, **Open Copilot** / **Open Preview** labels, a rewritten Welcome, a three-step Brief (your data · what we found · only you can answer), and an **Admin** screen (type cards on the left, editor on the right) to view / add / edit / delete app types.
25+
- App Builder **KPI guidelines**`types/semantic-kpis/` ships `SKILL.md` + `reference/streamlit_app.py` + `CHECKLIST.md`. After an approved Write, Preview auto-runs; the generate prompt self-checks once against the checklist / `.preview.log`, then stops (manual **Fix with CoCo** if still red).
26+
- App Builder Copilot — **App brief** expander on the rail to edit the owner brief **and every type question**, with **Save** and **Save & regenerate** (queues CoCo to rewrite the app from `BRIEF.md`).
27+
- App Builder **shared generation skill** (`types/shared/SKILL.md`) — every Build / regenerate prompt tells CoCo to Read this file plus the type `SKILL.md` (absolute paths; both folders mounted via `add_dirs`). Admin can edit both files. Type skills extend shared; they do not replace it.
28+
29+
### Changed
30+
31+
- App Builder Welcome — only **Get started — browse types** remains; **Try a demo type** and the Welcome **Open Copilot** button are gone (Copilot stays in the header).
32+
- App Builder skills live under `types/` — each type’s `SKILL.md` sits next to `type.json`; the shared pack is `types/shared/SKILL.md` (no `type.json`, so it is not a catalog card).
33+
- Copilot rail **Display config** — the **Last messages** / **First 200 characters** pills move into an icon-only Material popover (`:material/display_settings:`, no label). Inside: the same on/off pills plus sliders for last-message count (1–50) and first-*n* characters (40–1000). Slider and pill changes fragment-rerun the rail (popover stays open) so the transcript updates live. New helper: `transcript_display_config()`. `transcript_view_pills()` stays for apps that call `panel()` directly. While CoCo runs, **Working · …** and the model name sit on one row.
34+
- App Builder generate prompt — self-check against `CHECKLIST.md` only when the type ships one (KPI does; other types skip without commenting).
35+
- App Builder **Brief****Build this app**, **Try a local demo**, **Open Copilot**, **Open Studio**, and **Delete app** sit at the top of the page. **App name** is its own card above **Your brief** (display name; folder slug stays). No expanders; type story / allows / will-not in columns; sketches under the brief; one **Questions** card on the right. Profile metrics appear only when a file was read.
36+
- App Builder apps are **named** — Library **Create a new project** (type card popover + App name) writes `out/<slug>/`; header **New app** is gone; Resume and the header badge show the app name. Resume and Brief can **delete** an app (confirm popover).
37+
- App Builder **Library****Resume** and **Create a new project** both use a 6-column grid. Topic pills sit at the top and filter saved apps and types. Resume cards show name, type, grounding, last updated, Open / Delete.
38+
- App Builder catalog — each type brief gained two extra questions (audience, tone, layout, comparison, …). **`0.1.8` live set locked** to the six folders under `types/` (KPI presentation, Data quality, Call transcription, Meeting recap, Prompt library, CSV explorer). Document comparison and every `urls` type are later.
39+
- App Builder **Admin** — type cards and the type editor sit in bordered panes with a vertical resize slider; short fields use three-column rows; icon is a Material Symbol popover; Brief questions sit in tabs (add / edit / delete), not a JSON textarea.
40+
- BI demo fixtures live under [`examples/bi_samples/`](examples/bi_samples/) (`tableau/` + `powerbi/`). Chat exploratory prompts stay in [`examples/testdata/`](examples/testdata/).
41+
42+
### Fixed
43+
44+
- App Builder **Save & regenerate** now writes `BRIEF.md` from the expander widgets before queuing CoCo, and does not let the Brief page overwrite that file on the same turn.
45+
46+
### Security
47+
48+
- Lockfile: `gitpython` 3.1.58 → 3.1.61 and `pip` 26.1.2 → 26.2.1 (`make audit`).
49+
1550
## [0.1.7] — 2026-08-15
1651

1752
Alpha follow-up: a reusable Streamlit App Viewer, and BI → Semantic now loads Tableau **or** Power BI.

ID.md

Lines changed: 5 additions & 5 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-08-15 |
12+
| **Last updated** | 2026-09-06 |
1313
| **Confidentiality** | Public |
1414

1515
---
@@ -28,11 +28,11 @@
2828

2929
## Maturity Justification
3030

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

33-
- Clients where used: 0 (alpha). Internal: Data Product Studio.
33+
- 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.
35-
- Demo available: yes (`make chat`, `make backlog`, `make bi-semantic`, [`doc/training/`](doc/training/training-overview.md))
35+
- Demo available: yes (`make chat`, `make backlog`, `make bi-semantic`, `make app-builder`, [`doc/training/`](doc/training/training-overview.md))
3636
- Snowflake Alliance pre-alignment: no
3737

3838
**Next milestone**: N1 — conditions needed:
@@ -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.7`
45+
- [x] Marketing one-pager (`doc/marketing/one-pager.md`) — refreshed for `0.1.8`
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

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ EXAMPLE ?= examples/chat_app.py
1010

1111
.PHONY: help install sync test lint format check audit e2e-install e2e test-all \
1212
run chat approval structured headless backlog cwd-upload e2e-harness \
13-
bi-semantic tableau-semantic \
13+
bi-semantic tableau-semantic app-builder \
1414
build publish sync-release clean adoption-stats
1515

1616
# Public release clone (override: make sync-release RELEASE_REPO=/path/to/streamlit-coco)
@@ -77,6 +77,9 @@ bi-semantic: ## Run BI → Semantic (Tableau / Power BI, repo streamlit-coco)
7777

7878
tableau-semantic: bi-semantic ## Deprecated alias for bi-semantic
7979

80+
app-builder: ## Run App Builder (type library → brief → Copilot / Preview)
81+
cd examples/app_builder && $(UV) run --project ../.. --extra dev --with 'streamlit-extras>=1.3.0' python -m streamlit run app.py
82+
8083
e2e-harness: ## Run CoCo-free UX harness used by Playwright
8184
$(STREAMLIT) examples/e2e_ux_harness.py
8285

README.md

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
# streamlit-coco
22

3-
**Built (with love) by Devoteam Snowflake Partner, brings Snowflake CoCo into Streamlit** — streaming agent UI, tool cards you can actually read, and approval gates that fit governed data apps.
3+
**Built (with love) by Devoteam Snowflake Partner** Snowflake CoCo in *your* Streamlit app: a right-rail Copilot, a live preview of the app it writes, tool cards you can read, and approval gates that fit governed data apps.
44

55
[![CI](https://github.com/lletourmy/streamlit-coco/actions/workflows/ci.yml/badge.svg)](https://github.com/lletourmy/streamlit-coco/actions/workflows/ci.yml)
66
[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
77

8-
You own the page. CoCo owns the session. `panel()` streams the transcript; `copilot_rail()` wraps that panel as a right-rail Copilot for multipage apps. Your app keeps `st.chat_input`, metrics, and forms. Approvals pause Write / Edit / Bash / SQL until someone clicks **Approve once**, **Always allow**, or **Deny**.
8+
You own the page. CoCo owns the session. `copilot_rail()` sits in the product and takes jobs from your screens; `app_viewer()` runs the Streamlit app the agent just wrote, next to the rail. `panel()` streams the transcript. Approvals pause Write / Edit / Bash / SQL until someone clicks **Approve once**, **Always allow**, or **Deny**.
99

10-
![CoCo for Streamlitstreaming transcript with a Glob tool card](doc/screenshot.png)
10+
![BI → SemanticPreview of the generated Streamlit app beside the Copilot rail](doc/screenshot.png)
1111

12-
> Alpha `0.1.7` — API may still move. Star / watch the repo if you plan to ship on it.
12+
> Alpha `0.1.8` — 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)
@@ -23,7 +23,7 @@ You own the page. CoCo owns the session. `panel()` streams the transcript; `copi
2323
| Wire CoCo yourself across Streamlit reruns | Session + fragment polling that keeps streaming |
2424
| Raw JSON tool dumps | Meaningful cards (Glob, Grep, Read, Write, SQL, AskUser…) |
2525
| Hope the agent behaves | `require_approval_for` + HITL UI |
26-
| Chat-only demos | Structured callbacks into your own widgets |
26+
| Chat-only demos | Structured callbacks, a Copilot rail, and a live app preview |
2727

2828
Also: headless `query()` for scripts and CI, plus a legacy all-in-one `chat()` if you want built-in input.
2929

@@ -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.7` — APIs may still move. Prefer `panel()` + your own input; `chat()` is the legacy all-in-one.
40+
Alpha `0.1.8` — APIs may still move. Prefer `panel()` + your own input; `chat()` is the legacy all-in-one.
4141

4242
---
4343

@@ -111,12 +111,14 @@ make structured # custom structured-output panel
111111
make headless # asyncio query() pipeline
112112
make backlog # Product Backlog Desk (multipage business demo)
113113
make bi-semantic # Tableau / Power BI → semantic view + RAP (screens 1–6)
114+
make app-builder # App Builder (type library → brief → Copilot / Preview)
114115
# make tableau-semantic is an alias for bi-semantic
115116
```
116117

117118
Exploratory prompts: [`examples/testdata/prompts.json`](examples/testdata/prompts.json).
118-
Backlog desk: [`examples/backlog_desk/README.md`](examples/backlog_desk/README.md).
119-
BI → Semantic: [`examples/bi_to_semantic/README.md`](examples/bi_to_semantic/README.md).
119+
Backlog desk: [`examples/backlog_desk/README.md`](examples/backlog_desk/README.md).
120+
BI → Semantic: [`examples/bi_to_semantic/README.md`](examples/bi_to_semantic/README.md).
121+
App Builder: [`examples/app_builder/README.md`](examples/app_builder/README.md).
120122
File upload: [`doc/features/file-upload/file-upload.md`](doc/features/file-upload/file-upload.md).
121123

122124
---
@@ -153,10 +155,10 @@ asyncio.run(run())
153155

154156
## Architecture
155157

156-
The agent is **server-side**. The browser only sees Streamlit widgets. `panel()` (or `copilot_rail()` around it) polls a `CocoSession` worker via `@st.fragment`; the session talks to the Cortex Code Agent SDK, which runs the `cortex` CLI against your Snowflake account. Destructive tools pause in Python (`can_use_tool`) until someone clicks Approve / Deny. Headless `query()` skips the UI and uses the same session/SDK path.
158+
The agent is **server-side**. The browser only sees Streamlit widgets. `panel()` (or `copilot_rail()` around it) polls a `CocoSession` worker via `@st.fragment`; `app_viewer()` is a separate child `streamlit run` in an iframe. The session talks to the Cortex Code Agent SDK, which runs the `cortex` CLI against your Snowflake account. Destructive tools pause in Python (`can_use_tool`) until someone clicks Approve / Deny. Headless `query()` skips the UI and uses the same session/SDK path.
157159

158160
```
159-
Browser ──► panel() / copilot_rail() / chat_input_bar()
161+
Browser ──► panel() / copilot_rail() / app_viewer() / chat_input_bar()
160162
│ @st.fragment poll (app page does not rerun)
161163
162164
CocoSession (thread + asyncio, transcript + pending approval)
@@ -170,7 +172,7 @@ Legacy `chat()` is the same session, with a CCv2 frontend instead of native widg
170172
| Capability | Entry points |
171173
| --- | --- |
172174
| Native panel + approvals | `panel()`, `chat_input_bar()`, `render_approvals()` |
173-
| Copilot rail (right-column Copilot) | `copilot_rail()`, `transcript_view_pills()`[`doc/features/copilot-rail/`](doc/features/copilot-rail/) |
175+
| Copilot rail (right-column Copilot) | `copilot_rail()`, `transcript_display_config()`, `example_questions=`[`doc/features/copilot-rail/`](doc/features/copilot-rail/) |
174176
| App viewer (child Streamlit iframe) | `app_viewer()`, `default_fix_prompt()`[`doc/features/app-viewer/`](doc/features/app-viewer/) |
175177
| Tool cards & AskUser / plan UI | see [`doc/features/tools-display/`](doc/features/tools-display/) |
176178
| Session & options | `CocoSession`, `CocoOptions`, `get_or_create_session` |
@@ -180,15 +182,15 @@ Legacy `chat()` is the same session, with a CCv2 frontend instead of native widg
180182
```
181183
streamlit_coco/
182184
├── ui.py # panel(), send_prompt(), render_approvals()
183-
├── rail.py # copilot_rail(), transcript_view_pills()
185+
├── rail.py # copilot_rail(), transcript_display_config()
184186
├── viewer.py # app_viewer()
185187
├── app_preview.py # child Streamlit process helpers
186188
├── session.py # CocoSession worker + transcript
187189
├── permissions.py # HITL can_use_tool gates
188190
├── query.py # headless query()
189191
├── component.py # legacy chat() CCv2 mount
190192
└── frontend/ # static CCv2 assets
191-
examples/ # chat, backlog desk, BI → Semantic, …
193+
examples/ # chat, backlog desk, BI → Semantic, App Builder,
192194
doc/ # PRD, roadmap, feature specs
193195
```
194196

0 commit comments

Comments
 (0)