floop 1.2.0__tar.gz → 2.0.0__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.
- floop-2.0.0/.github/workflows/cicd.yml +34 -0
- floop-2.0.0/LICENSE +21 -0
- floop-2.0.0/PKG-INFO +275 -0
- floop-2.0.0/README.md +260 -0
- {floop-1.2.0 → floop-2.0.0}/pyproject.toml +1 -1
- {floop-1.2.0 → floop-2.0.0}/src/floop/__init__.py +1 -1
- {floop-1.2.0 → floop-2.0.0}/src/floop/adapters.py +2 -3
- floop-2.0.0/src/floop/cli.py +521 -0
- floop-2.0.0/src/floop/preview.py +94 -0
- floop-2.0.0/src/floop/project.py +230 -0
- {floop-1.2.0 → floop-2.0.0}/src/floop/review.py +19 -65
- floop-2.0.0/src/floop/skills.py +155 -0
- floop-2.0.0/src/floop.egg-info/PKG-INFO +275 -0
- floop-2.0.0/src/floop.egg-info/SOURCES.txt +27 -0
- floop-2.0.0/src/floop.egg-info/scm_file_list.json +23 -0
- floop-2.0.0/src/floop.egg-info/scm_version.json +8 -0
- floop-2.0.0/tests/test_adapters.py +77 -0
- floop-2.0.0/tests/test_cli.py +392 -0
- floop-2.0.0/tests/test_preview.py +47 -0
- floop-2.0.0/tests/test_project.py +101 -0
- floop-2.0.0/tests/test_review.py +302 -0
- floop-1.2.0/.github/workflows/docs.yml +0 -66
- floop-1.2.0/PKG-INFO +0 -225
- floop-1.2.0/README.md +0 -212
- floop-1.2.0/docs/architecture.md +0 -150
- floop-1.2.0/docs/assets/javascripts/mermaid.min.js +0 -2811
- floop-1.2.0/docs/commands.md +0 -86
- floop-1.2.0/docs/contributing.md +0 -20
- floop-1.2.0/docs/demos/context-network.md +0 -276
- floop-1.2.0/docs/demos/cross-session.md +0 -114
- floop-1.2.0/docs/demos/domain-learning.md +0 -136
- floop-1.2.0/docs/demos/requirements-driven.md +0 -140
- floop-1.2.0/docs/demos/team-onboarding.md +0 -135
- floop-1.2.0/docs/features.md +0 -41
- floop-1.2.0/docs/getting-started.md +0 -34
- floop-1.2.0/docs/index.md +0 -84
- floop-1.2.0/docs/use-cases/enterprises.md +0 -112
- floop-1.2.0/docs/use-cases/individuals.md +0 -109
- floop-1.2.0/docs/use-cases.md +0 -18
- floop-1.2.0/mkdocs.yml +0 -77
- floop-1.2.0/src/floop/cli.py +0 -1469
- floop-1.2.0/src/floop/preview.py +0 -1032
- floop-1.2.0/src/floop/prototype.py +0 -793
- floop-1.2.0/src/floop/skills.py +0 -812
- floop-1.2.0/src/floop/tokens.py +0 -1336
- floop-1.2.0/src/floop.egg-info/PKG-INFO +0 -225
- floop-1.2.0/src/floop.egg-info/SOURCES.txt +0 -42
- floop-1.2.0/tests/test_adapters.py +0 -411
- floop-1.2.0/tests/test_cli.py +0 -1488
- floop-1.2.0/tests/test_preview.py +0 -792
- floop-1.2.0/tests/test_prototype.py +0 -1766
- floop-1.2.0/tests/test_review.py +0 -828
- floop-1.2.0/tests/test_tokens.py +0 -1122
- {floop-1.2.0 → floop-2.0.0}/.github/workflows/release.yml +0 -0
- {floop-1.2.0 → floop-2.0.0}/.gitignore +0 -0
- {floop-1.2.0 → floop-2.0.0}/setup.cfg +0 -0
- {floop-1.2.0 → floop-2.0.0}/src/floop.egg-info/dependency_links.txt +0 -0
- {floop-1.2.0 → floop-2.0.0}/src/floop.egg-info/entry_points.txt +0 -0
- {floop-1.2.0 → floop-2.0.0}/src/floop.egg-info/requires.txt +0 -0
- {floop-1.2.0 → floop-2.0.0}/src/floop.egg-info/top_level.txt +0 -0
- {floop-1.2.0 → floop-2.0.0}/tests/__init__.py +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Test & Deploy Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
pages: write
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: "pages"
|
|
15
|
+
cancel-in-progress: true
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
test:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
strategy:
|
|
21
|
+
matrix:
|
|
22
|
+
python-version: ['3.10', '3.12', '3.13']
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- uses: actions/setup-python@v5
|
|
27
|
+
with:
|
|
28
|
+
python-version: ${{ matrix.python-version }}
|
|
29
|
+
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: pip install -e ".[test]"
|
|
32
|
+
|
|
33
|
+
- name: Run tests
|
|
34
|
+
run: python -m pytest tests/ -v
|
floop-2.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 floop
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
floop-2.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: floop
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Project/version review loop CLI and agent skill for AI artifacts
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Requires-Dist: click>=8.1
|
|
10
|
+
Requires-Dist: pyyaml>=6.0
|
|
11
|
+
Provides-Extra: test
|
|
12
|
+
Requires-Dist: pytest>=8.0; extra == "test"
|
|
13
|
+
Requires-Dist: pytest-cov>=5.0; extra == "test"
|
|
14
|
+
Dynamic: license-file
|
|
15
|
+
|
|
16
|
+
# floop-client
|
|
17
|
+
|
|
18
|
+
**AI artifacts need review. floop-client is the review-loop CLI that connects fppt decks and fdesign prototypes to floop-server for structured feedback — without touching artifact internals.**
|
|
19
|
+
|
|
20
|
+
[](https://pypi.org/project/floop/)
|
|
21
|
+
[](https://pypi.org/project/floop/)
|
|
22
|
+
[](LICENSE)
|
|
23
|
+
[](#supported-agents)
|
|
24
|
+
[](#)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## The Problem: The "Screenshot Ping-Pong" Trap
|
|
29
|
+
|
|
30
|
+
You built a beautiful prototype with fdesign or a polished deck with fppt. Now you need feedback from your team, your client, or your stakeholders. What happens next?
|
|
31
|
+
|
|
32
|
+
Screenshots in Slack. PDFs over email. "Can you make the button bluer?" scattered across three different threads. Feedback arrives out of context, untethered from the specific page or component it references. You spend more time chasing down what people meant than actually improving the artifact.
|
|
33
|
+
|
|
34
|
+
**Why does this happen?** AI tools are great at *building* artifacts, but they have no built-in mechanism for *reviewing* them. Every team cobbles together their own ad-hoc feedback loop — and every loop leaks context.
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
WITHOUT floop-client
|
|
38
|
+
|
|
39
|
+
Build v1 → Screenshot → Slack → "Looks good but..." → Where was this?
|
|
40
|
+
Build v2 → PDF export → Email → "Change the header" → Which page?
|
|
41
|
+
Build v3 → Loom video → Notion → "The spacing is off" → Which component?
|
|
42
|
+
|
|
43
|
+
Result: Feedback is everywhere and nowhere. Context is lost.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
WITH floop-client
|
|
48
|
+
|
|
49
|
+
Build v1 → floop review upload → shareUrl → Reviewers comment inline
|
|
50
|
+
Fixes → Build v2 → floop review upload → New shareUrl
|
|
51
|
+
Comments → floop comments → Route to fppt/fdesign → Fix & resolve
|
|
52
|
+
|
|
53
|
+
Result: Every comment is anchored to a version, a page, and a DOM element.
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## What floop-client Does
|
|
59
|
+
|
|
60
|
+
floop-client is the **review-loop layer** between your AI-built artifacts and your reviewers. It does not build decks or prototypes — it creates version containers, uploads them to floop-server, fetches structured comments, and resolves them after fixes.
|
|
61
|
+
|
|
62
|
+
It is intentionally artifact-agnostic. fppt owns presentation logic. fdesign owns prototype logic. floop-client owns the review pipeline.
|
|
63
|
+
|
|
64
|
+
```mermaid
|
|
65
|
+
flowchart LR
|
|
66
|
+
subgraph "Build"
|
|
67
|
+
fppt["fppt<br/>Decks"]
|
|
68
|
+
fdesign["fdesign<br/>Prototypes"]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
subgraph "Review Loop"
|
|
72
|
+
floop["floop-client<br/>Projects · Versions · Upload · Comments"]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
subgraph "Server"
|
|
76
|
+
server["floop-server<br/>Review UI · Comment Threads"]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
fppt -->|"copies build into version"| floop
|
|
80
|
+
fdesign -->|"copies build into version"| floop
|
|
81
|
+
floop -->|"upload"| server
|
|
82
|
+
server -->|"comments"| floop
|
|
83
|
+
floop -->|"route fixes"| fppt
|
|
84
|
+
floop -->|"route fixes"| fdesign
|
|
85
|
+
|
|
86
|
+
style floop fill:#e8f4fd,stroke:#2563EB,stroke-width:2px
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Why floop-client
|
|
92
|
+
|
|
93
|
+
### For Makers & Founders
|
|
94
|
+
> You ship fast. Feedback shouldn't slow you down.
|
|
95
|
+
|
|
96
|
+
Stop juggling screenshots and Slack threads. Publish a version with one command, share a single link, and get structured, anchored feedback that tells you exactly which page and element each comment refers to.
|
|
97
|
+
|
|
98
|
+
### For Teams (Designers & Developers)
|
|
99
|
+
> Review cycles need structure, not chaos.
|
|
100
|
+
|
|
101
|
+
Every comment carries a priority, labels (bug, copy, layout, responsive, accessibility), and a DOM anchor. No more "the button on that one page" — reviewers click, comment, and the context travels with the feedback. After fixes, resolve comments to close the loop.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Use Cases
|
|
106
|
+
|
|
107
|
+
### Scenario 1: Client Review Round
|
|
108
|
+
**Problem:** You built a prototype with fdesign. The client wants to review it. You export screenshots, paste them into a Google Doc, and wait. Three days later, you get back 47 comments — half of them referencing "the blue section" on "that page."
|
|
109
|
+
|
|
110
|
+
**floop-client Solution:** Run `floop review upload --project my-app --version v1`. Share the `shareUrl`. The client clicks through the prototype on floop-server, clicks any element, and leaves anchored comments. You run `floop comments` to fetch them all, grouped by page and priority.
|
|
111
|
+
|
|
112
|
+
### Scenario 2: Deck Stakeholder Approval
|
|
113
|
+
**Problem:** You built a presentation with fppt. Marketing, Legal, and the CEO all need to sign off. Each sends feedback in a different format. You spend hours consolidating.
|
|
114
|
+
|
|
115
|
+
**floop-client Solution:** One `shareUrl` for all stakeholders. Comments are threaded, labeled, and anchored to specific slides. Legal flags get a `legal` label. Marketing feedback gets `copy`. You address them, publish v2, and resolve each comment — full audit trail.
|
|
116
|
+
|
|
117
|
+
### Scenario 3: Continuous Iteration
|
|
118
|
+
**Problem:** You're iterating fast with AI. Every build is a new version. You need to track what changed, what was reviewed, and what's still open — across multiple versions.
|
|
119
|
+
|
|
120
|
+
**floop-client Solution:** Each version is independent with its own comment thread. `floop comments --version-id <id>` fetches feedback for a specific version. Reviewers can compare versions side-by-side on floop-server. Nothing falls through the cracks.
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Features
|
|
125
|
+
|
|
126
|
+
- **Local Version Containers**: Create named projects and versions under `.floop/` — artifact services copy their build output in.
|
|
127
|
+
- **One-Command Upload**: `floop review upload` zips and publishes a version to floop-server, returning a `shareUrl`.
|
|
128
|
+
- **Structured Comments**: Fetch anchored, labeled, prioritized feedback — every comment knows its page, element, and viewport.
|
|
129
|
+
- **Comment Resolution**: `floop resolve` marks feedback as addressed after fixes are published.
|
|
130
|
+
- **Local Preview**: `floop preview` serves version directories locally for quick inspection before upload.
|
|
131
|
+
- **Multi-Agent Support**: Install skills into 7 AI agent platforms with `floop enable`.
|
|
132
|
+
|
|
133
|
+
### Responsibility Boundary
|
|
134
|
+
|
|
135
|
+
floop-client is intentionally boring. It should remain artifact-agnostic.
|
|
136
|
+
|
|
137
|
+
| Owned by floop-client | Owned by fppt / fdesign |
|
|
138
|
+
|---|---|
|
|
139
|
+
| `.floop/` workspace | `.fppt/` deck workspace |
|
|
140
|
+
| Project & version containers | `.fdesign/` prototype workspace |
|
|
141
|
+
| `floop review upload` | Deck YAML validation |
|
|
142
|
+
| `floop comments` | Design token validation |
|
|
143
|
+
| `floop resolve` | Component & sitemap logic |
|
|
144
|
+
| `floop preview` | Theme systems |
|
|
145
|
+
| Server project binding | Artifact build output |
|
|
146
|
+
|
|
147
|
+
### Supported Agents
|
|
148
|
+
|
|
149
|
+
| Agent | Command |
|
|
150
|
+
|-------|---------|
|
|
151
|
+
| GitHub Copilot | `floop enable copilot` |
|
|
152
|
+
| Cursor | `floop enable cursor` |
|
|
153
|
+
| Claude Code | `floop enable claude` |
|
|
154
|
+
| Trae IDE | `floop enable trae` |
|
|
155
|
+
| Qwen Code | `floop enable qwen-code` |
|
|
156
|
+
| OpenCode | `floop enable opencode` |
|
|
157
|
+
| OpenClaw | `floop enable openclaw` |
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Installation
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
pip install floop
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Verify:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
floop --version
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Quick Start
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# 1. Initialize workspace
|
|
179
|
+
cd your-project
|
|
180
|
+
floop init
|
|
181
|
+
|
|
182
|
+
# 2. Install skills into your AI agent
|
|
183
|
+
floop enable copilot # or: cursor, claude, trae, qwen-code, opencode, openclaw
|
|
184
|
+
|
|
185
|
+
# 3. Create a local project and version
|
|
186
|
+
floop projects create my-review
|
|
187
|
+
floop versions create v1 --project my-review --artifact-type fdesign --entrypoint index.html
|
|
188
|
+
|
|
189
|
+
# 4. Let fppt/fdesign copy artifact files into the version directory
|
|
190
|
+
# (your AI agent handles this automatically)
|
|
191
|
+
|
|
192
|
+
# 5. Configure review server and upload
|
|
193
|
+
floop review set --project my-review
|
|
194
|
+
floop review upload --project my-review --version v1 --json-output
|
|
195
|
+
# → shareUrl: https://floop-server.vercel.app/review/...
|
|
196
|
+
|
|
197
|
+
# 6. Share the link with reviewers, then fetch comments
|
|
198
|
+
floop comments --project my-review --version-id <server-version-id> --json-output
|
|
199
|
+
|
|
200
|
+
# 7. After fixes are published, resolve addressed comments
|
|
201
|
+
floop resolve <comment-id> --project my-review --version-id <server-version-id> --status resolved
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Workspace
|
|
207
|
+
|
|
208
|
+
```text
|
|
209
|
+
.floop/
|
|
210
|
+
├─ floop.env # Server URL + API key (no project key)
|
|
211
|
+
├─ config.json # Workspace metadata
|
|
212
|
+
└─ projects/
|
|
213
|
+
└─ <project>/
|
|
214
|
+
├─ project.json # Local metadata + serverProject binding
|
|
215
|
+
└─ versions/
|
|
216
|
+
└─ <version>/
|
|
217
|
+
├─ version.json
|
|
218
|
+
└─ ...artifact files copied by fppt/fdesign...
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Review Loop
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
┌── Build ──→ Version Container ──→ Upload ──→ Share ──→ Comments ──→ Fix ──┐
|
|
227
|
+
│ │
|
|
228
|
+
└───────────────────────────────────────────────────────────────────────────┘
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
1. Artifact service (fppt/fdesign) builds and checks its output.
|
|
232
|
+
2. Agent creates a local floop project/version container.
|
|
233
|
+
3. Agent verifies the local project has the correct `serverProject` binding.
|
|
234
|
+
4. If missing, agent runs `floop review set --project <project>`.
|
|
235
|
+
5. Artifact service copies its build output into the version directory.
|
|
236
|
+
6. `floop review upload` zips and uploads to floop-server.
|
|
237
|
+
7. Agent shares `shareUrl` with the user.
|
|
238
|
+
8. Agent fetches comments with `floop comments`.
|
|
239
|
+
9. Agent routes fixes to fppt, fdesign, or floop-client.
|
|
240
|
+
10. After a fixed version is uploaded, agent resolves addressed comments.
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## For Contributors
|
|
245
|
+
|
|
246
|
+
floop-client is the review-loop layer in the floop ecosystem. We welcome contributors who want to expand agent platform support or harden the upload/comment pipeline.
|
|
247
|
+
|
|
248
|
+
### Getting Started
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# 1. Fork and clone the repository
|
|
252
|
+
git clone https://github.com/lijma/floop-client.git
|
|
253
|
+
cd floop-client
|
|
254
|
+
|
|
255
|
+
# 2. Install inside a virtual environment for development
|
|
256
|
+
pip install -e ".[test]"
|
|
257
|
+
|
|
258
|
+
# 3. Run the test suite (floop-client maintains 100% coverage)
|
|
259
|
+
pytest --cov=floop --cov-report=term-missing --cov-fail-under=100
|
|
260
|
+
|
|
261
|
+
# 4. Want to add a new AI Agent to `floop enable`?
|
|
262
|
+
# Add yours directly in: src/floop/adapters.py
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## Star History
|
|
268
|
+
|
|
269
|
+
[](https://star-history.com/#lijma/floop-client&Date)
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## License
|
|
274
|
+
|
|
275
|
+
This project is licensed under the [MIT License](LICENSE).
|
floop-2.0.0/README.md
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# floop-client
|
|
2
|
+
|
|
3
|
+
**AI artifacts need review. floop-client is the review-loop CLI that connects fppt decks and fdesign prototypes to floop-server for structured feedback — without touching artifact internals.**
|
|
4
|
+
|
|
5
|
+
[](https://pypi.org/project/floop/)
|
|
6
|
+
[](https://pypi.org/project/floop/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](#supported-agents)
|
|
9
|
+
[](#)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## The Problem: The "Screenshot Ping-Pong" Trap
|
|
14
|
+
|
|
15
|
+
You built a beautiful prototype with fdesign or a polished deck with fppt. Now you need feedback from your team, your client, or your stakeholders. What happens next?
|
|
16
|
+
|
|
17
|
+
Screenshots in Slack. PDFs over email. "Can you make the button bluer?" scattered across three different threads. Feedback arrives out of context, untethered from the specific page or component it references. You spend more time chasing down what people meant than actually improving the artifact.
|
|
18
|
+
|
|
19
|
+
**Why does this happen?** AI tools are great at *building* artifacts, but they have no built-in mechanism for *reviewing* them. Every team cobbles together their own ad-hoc feedback loop — and every loop leaks context.
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
WITHOUT floop-client
|
|
23
|
+
|
|
24
|
+
Build v1 → Screenshot → Slack → "Looks good but..." → Where was this?
|
|
25
|
+
Build v2 → PDF export → Email → "Change the header" → Which page?
|
|
26
|
+
Build v3 → Loom video → Notion → "The spacing is off" → Which component?
|
|
27
|
+
|
|
28
|
+
Result: Feedback is everywhere and nowhere. Context is lost.
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
WITH floop-client
|
|
33
|
+
|
|
34
|
+
Build v1 → floop review upload → shareUrl → Reviewers comment inline
|
|
35
|
+
Fixes → Build v2 → floop review upload → New shareUrl
|
|
36
|
+
Comments → floop comments → Route to fppt/fdesign → Fix & resolve
|
|
37
|
+
|
|
38
|
+
Result: Every comment is anchored to a version, a page, and a DOM element.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## What floop-client Does
|
|
44
|
+
|
|
45
|
+
floop-client is the **review-loop layer** between your AI-built artifacts and your reviewers. It does not build decks or prototypes — it creates version containers, uploads them to floop-server, fetches structured comments, and resolves them after fixes.
|
|
46
|
+
|
|
47
|
+
It is intentionally artifact-agnostic. fppt owns presentation logic. fdesign owns prototype logic. floop-client owns the review pipeline.
|
|
48
|
+
|
|
49
|
+
```mermaid
|
|
50
|
+
flowchart LR
|
|
51
|
+
subgraph "Build"
|
|
52
|
+
fppt["fppt<br/>Decks"]
|
|
53
|
+
fdesign["fdesign<br/>Prototypes"]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
subgraph "Review Loop"
|
|
57
|
+
floop["floop-client<br/>Projects · Versions · Upload · Comments"]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
subgraph "Server"
|
|
61
|
+
server["floop-server<br/>Review UI · Comment Threads"]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
fppt -->|"copies build into version"| floop
|
|
65
|
+
fdesign -->|"copies build into version"| floop
|
|
66
|
+
floop -->|"upload"| server
|
|
67
|
+
server -->|"comments"| floop
|
|
68
|
+
floop -->|"route fixes"| fppt
|
|
69
|
+
floop -->|"route fixes"| fdesign
|
|
70
|
+
|
|
71
|
+
style floop fill:#e8f4fd,stroke:#2563EB,stroke-width:2px
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Why floop-client
|
|
77
|
+
|
|
78
|
+
### For Makers & Founders
|
|
79
|
+
> You ship fast. Feedback shouldn't slow you down.
|
|
80
|
+
|
|
81
|
+
Stop juggling screenshots and Slack threads. Publish a version with one command, share a single link, and get structured, anchored feedback that tells you exactly which page and element each comment refers to.
|
|
82
|
+
|
|
83
|
+
### For Teams (Designers & Developers)
|
|
84
|
+
> Review cycles need structure, not chaos.
|
|
85
|
+
|
|
86
|
+
Every comment carries a priority, labels (bug, copy, layout, responsive, accessibility), and a DOM anchor. No more "the button on that one page" — reviewers click, comment, and the context travels with the feedback. After fixes, resolve comments to close the loop.
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Use Cases
|
|
91
|
+
|
|
92
|
+
### Scenario 1: Client Review Round
|
|
93
|
+
**Problem:** You built a prototype with fdesign. The client wants to review it. You export screenshots, paste them into a Google Doc, and wait. Three days later, you get back 47 comments — half of them referencing "the blue section" on "that page."
|
|
94
|
+
|
|
95
|
+
**floop-client Solution:** Run `floop review upload --project my-app --version v1`. Share the `shareUrl`. The client clicks through the prototype on floop-server, clicks any element, and leaves anchored comments. You run `floop comments` to fetch them all, grouped by page and priority.
|
|
96
|
+
|
|
97
|
+
### Scenario 2: Deck Stakeholder Approval
|
|
98
|
+
**Problem:** You built a presentation with fppt. Marketing, Legal, and the CEO all need to sign off. Each sends feedback in a different format. You spend hours consolidating.
|
|
99
|
+
|
|
100
|
+
**floop-client Solution:** One `shareUrl` for all stakeholders. Comments are threaded, labeled, and anchored to specific slides. Legal flags get a `legal` label. Marketing feedback gets `copy`. You address them, publish v2, and resolve each comment — full audit trail.
|
|
101
|
+
|
|
102
|
+
### Scenario 3: Continuous Iteration
|
|
103
|
+
**Problem:** You're iterating fast with AI. Every build is a new version. You need to track what changed, what was reviewed, and what's still open — across multiple versions.
|
|
104
|
+
|
|
105
|
+
**floop-client Solution:** Each version is independent with its own comment thread. `floop comments --version-id <id>` fetches feedback for a specific version. Reviewers can compare versions side-by-side on floop-server. Nothing falls through the cracks.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Features
|
|
110
|
+
|
|
111
|
+
- **Local Version Containers**: Create named projects and versions under `.floop/` — artifact services copy their build output in.
|
|
112
|
+
- **One-Command Upload**: `floop review upload` zips and publishes a version to floop-server, returning a `shareUrl`.
|
|
113
|
+
- **Structured Comments**: Fetch anchored, labeled, prioritized feedback — every comment knows its page, element, and viewport.
|
|
114
|
+
- **Comment Resolution**: `floop resolve` marks feedback as addressed after fixes are published.
|
|
115
|
+
- **Local Preview**: `floop preview` serves version directories locally for quick inspection before upload.
|
|
116
|
+
- **Multi-Agent Support**: Install skills into 7 AI agent platforms with `floop enable`.
|
|
117
|
+
|
|
118
|
+
### Responsibility Boundary
|
|
119
|
+
|
|
120
|
+
floop-client is intentionally boring. It should remain artifact-agnostic.
|
|
121
|
+
|
|
122
|
+
| Owned by floop-client | Owned by fppt / fdesign |
|
|
123
|
+
|---|---|
|
|
124
|
+
| `.floop/` workspace | `.fppt/` deck workspace |
|
|
125
|
+
| Project & version containers | `.fdesign/` prototype workspace |
|
|
126
|
+
| `floop review upload` | Deck YAML validation |
|
|
127
|
+
| `floop comments` | Design token validation |
|
|
128
|
+
| `floop resolve` | Component & sitemap logic |
|
|
129
|
+
| `floop preview` | Theme systems |
|
|
130
|
+
| Server project binding | Artifact build output |
|
|
131
|
+
|
|
132
|
+
### Supported Agents
|
|
133
|
+
|
|
134
|
+
| Agent | Command |
|
|
135
|
+
|-------|---------|
|
|
136
|
+
| GitHub Copilot | `floop enable copilot` |
|
|
137
|
+
| Cursor | `floop enable cursor` |
|
|
138
|
+
| Claude Code | `floop enable claude` |
|
|
139
|
+
| Trae IDE | `floop enable trae` |
|
|
140
|
+
| Qwen Code | `floop enable qwen-code` |
|
|
141
|
+
| OpenCode | `floop enable opencode` |
|
|
142
|
+
| OpenClaw | `floop enable openclaw` |
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Installation
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
pip install floop
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Verify:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
floop --version
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Quick Start
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# 1. Initialize workspace
|
|
164
|
+
cd your-project
|
|
165
|
+
floop init
|
|
166
|
+
|
|
167
|
+
# 2. Install skills into your AI agent
|
|
168
|
+
floop enable copilot # or: cursor, claude, trae, qwen-code, opencode, openclaw
|
|
169
|
+
|
|
170
|
+
# 3. Create a local project and version
|
|
171
|
+
floop projects create my-review
|
|
172
|
+
floop versions create v1 --project my-review --artifact-type fdesign --entrypoint index.html
|
|
173
|
+
|
|
174
|
+
# 4. Let fppt/fdesign copy artifact files into the version directory
|
|
175
|
+
# (your AI agent handles this automatically)
|
|
176
|
+
|
|
177
|
+
# 5. Configure review server and upload
|
|
178
|
+
floop review set --project my-review
|
|
179
|
+
floop review upload --project my-review --version v1 --json-output
|
|
180
|
+
# → shareUrl: https://floop-server.vercel.app/review/...
|
|
181
|
+
|
|
182
|
+
# 6. Share the link with reviewers, then fetch comments
|
|
183
|
+
floop comments --project my-review --version-id <server-version-id> --json-output
|
|
184
|
+
|
|
185
|
+
# 7. After fixes are published, resolve addressed comments
|
|
186
|
+
floop resolve <comment-id> --project my-review --version-id <server-version-id> --status resolved
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Workspace
|
|
192
|
+
|
|
193
|
+
```text
|
|
194
|
+
.floop/
|
|
195
|
+
├─ floop.env # Server URL + API key (no project key)
|
|
196
|
+
├─ config.json # Workspace metadata
|
|
197
|
+
└─ projects/
|
|
198
|
+
└─ <project>/
|
|
199
|
+
├─ project.json # Local metadata + serverProject binding
|
|
200
|
+
└─ versions/
|
|
201
|
+
└─ <version>/
|
|
202
|
+
├─ version.json
|
|
203
|
+
└─ ...artifact files copied by fppt/fdesign...
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Review Loop
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
┌── Build ──→ Version Container ──→ Upload ──→ Share ──→ Comments ──→ Fix ──┐
|
|
212
|
+
│ │
|
|
213
|
+
└───────────────────────────────────────────────────────────────────────────┘
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
1. Artifact service (fppt/fdesign) builds and checks its output.
|
|
217
|
+
2. Agent creates a local floop project/version container.
|
|
218
|
+
3. Agent verifies the local project has the correct `serverProject` binding.
|
|
219
|
+
4. If missing, agent runs `floop review set --project <project>`.
|
|
220
|
+
5. Artifact service copies its build output into the version directory.
|
|
221
|
+
6. `floop review upload` zips and uploads to floop-server.
|
|
222
|
+
7. Agent shares `shareUrl` with the user.
|
|
223
|
+
8. Agent fetches comments with `floop comments`.
|
|
224
|
+
9. Agent routes fixes to fppt, fdesign, or floop-client.
|
|
225
|
+
10. After a fixed version is uploaded, agent resolves addressed comments.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## For Contributors
|
|
230
|
+
|
|
231
|
+
floop-client is the review-loop layer in the floop ecosystem. We welcome contributors who want to expand agent platform support or harden the upload/comment pipeline.
|
|
232
|
+
|
|
233
|
+
### Getting Started
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# 1. Fork and clone the repository
|
|
237
|
+
git clone https://github.com/lijma/floop-client.git
|
|
238
|
+
cd floop-client
|
|
239
|
+
|
|
240
|
+
# 2. Install inside a virtual environment for development
|
|
241
|
+
pip install -e ".[test]"
|
|
242
|
+
|
|
243
|
+
# 3. Run the test suite (floop-client maintains 100% coverage)
|
|
244
|
+
pytest --cov=floop --cov-report=term-missing --cov-fail-under=100
|
|
245
|
+
|
|
246
|
+
# 4. Want to add a new AI Agent to `floop enable`?
|
|
247
|
+
# Add yours directly in: src/floop/adapters.py
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Star History
|
|
253
|
+
|
|
254
|
+
[](https://star-history.com/#lijma/floop-client&Date)
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## License
|
|
259
|
+
|
|
260
|
+
This project is licensed under the [MIT License](LICENSE).
|
|
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "floop"
|
|
7
7
|
dynamic = ["version"]
|
|
8
|
-
description = "
|
|
8
|
+
description = "Project/version review loop CLI and agent skill for AI artifacts"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
11
11
|
requires-python = ">=3.10"
|
|
@@ -42,8 +42,7 @@ class CopilotAdapter:
|
|
|
42
42
|
instr_path = instr_dir / "floop.instructions.md"
|
|
43
43
|
instr_path.write_text(
|
|
44
44
|
"---\n"
|
|
45
|
-
"description: 'This project uses floop for
|
|
46
|
-
"Follow the floop workflow for design tokens, sitemap, components, and page generation.'\n"
|
|
45
|
+
"description: 'This project uses floop-client for artifact review projects, versions, uploads, and comments.'\n"
|
|
47
46
|
"applyTo: '**'\n"
|
|
48
47
|
"---\n\n"
|
|
49
48
|
+ INSTRUCTION,
|
|
@@ -91,7 +90,7 @@ class CursorAdapter:
|
|
|
91
90
|
instr_path = rules_dir / "floop.mdc"
|
|
92
91
|
instr_path.write_text(
|
|
93
92
|
'---\n'
|
|
94
|
-
'description: "floop
|
|
93
|
+
'description: "floop-client review workflow — always-on context"\n'
|
|
95
94
|
'globs: \n'
|
|
96
95
|
'alwaysApply: true\n'
|
|
97
96
|
'---\n\n'
|