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.
Files changed (61) hide show
  1. floop-2.0.0/.github/workflows/cicd.yml +34 -0
  2. floop-2.0.0/LICENSE +21 -0
  3. floop-2.0.0/PKG-INFO +275 -0
  4. floop-2.0.0/README.md +260 -0
  5. {floop-1.2.0 → floop-2.0.0}/pyproject.toml +1 -1
  6. {floop-1.2.0 → floop-2.0.0}/src/floop/__init__.py +1 -1
  7. {floop-1.2.0 → floop-2.0.0}/src/floop/adapters.py +2 -3
  8. floop-2.0.0/src/floop/cli.py +521 -0
  9. floop-2.0.0/src/floop/preview.py +94 -0
  10. floop-2.0.0/src/floop/project.py +230 -0
  11. {floop-1.2.0 → floop-2.0.0}/src/floop/review.py +19 -65
  12. floop-2.0.0/src/floop/skills.py +155 -0
  13. floop-2.0.0/src/floop.egg-info/PKG-INFO +275 -0
  14. floop-2.0.0/src/floop.egg-info/SOURCES.txt +27 -0
  15. floop-2.0.0/src/floop.egg-info/scm_file_list.json +23 -0
  16. floop-2.0.0/src/floop.egg-info/scm_version.json +8 -0
  17. floop-2.0.0/tests/test_adapters.py +77 -0
  18. floop-2.0.0/tests/test_cli.py +392 -0
  19. floop-2.0.0/tests/test_preview.py +47 -0
  20. floop-2.0.0/tests/test_project.py +101 -0
  21. floop-2.0.0/tests/test_review.py +302 -0
  22. floop-1.2.0/.github/workflows/docs.yml +0 -66
  23. floop-1.2.0/PKG-INFO +0 -225
  24. floop-1.2.0/README.md +0 -212
  25. floop-1.2.0/docs/architecture.md +0 -150
  26. floop-1.2.0/docs/assets/javascripts/mermaid.min.js +0 -2811
  27. floop-1.2.0/docs/commands.md +0 -86
  28. floop-1.2.0/docs/contributing.md +0 -20
  29. floop-1.2.0/docs/demos/context-network.md +0 -276
  30. floop-1.2.0/docs/demos/cross-session.md +0 -114
  31. floop-1.2.0/docs/demos/domain-learning.md +0 -136
  32. floop-1.2.0/docs/demos/requirements-driven.md +0 -140
  33. floop-1.2.0/docs/demos/team-onboarding.md +0 -135
  34. floop-1.2.0/docs/features.md +0 -41
  35. floop-1.2.0/docs/getting-started.md +0 -34
  36. floop-1.2.0/docs/index.md +0 -84
  37. floop-1.2.0/docs/use-cases/enterprises.md +0 -112
  38. floop-1.2.0/docs/use-cases/individuals.md +0 -109
  39. floop-1.2.0/docs/use-cases.md +0 -18
  40. floop-1.2.0/mkdocs.yml +0 -77
  41. floop-1.2.0/src/floop/cli.py +0 -1469
  42. floop-1.2.0/src/floop/preview.py +0 -1032
  43. floop-1.2.0/src/floop/prototype.py +0 -793
  44. floop-1.2.0/src/floop/skills.py +0 -812
  45. floop-1.2.0/src/floop/tokens.py +0 -1336
  46. floop-1.2.0/src/floop.egg-info/PKG-INFO +0 -225
  47. floop-1.2.0/src/floop.egg-info/SOURCES.txt +0 -42
  48. floop-1.2.0/tests/test_adapters.py +0 -411
  49. floop-1.2.0/tests/test_cli.py +0 -1488
  50. floop-1.2.0/tests/test_preview.py +0 -792
  51. floop-1.2.0/tests/test_prototype.py +0 -1766
  52. floop-1.2.0/tests/test_review.py +0 -828
  53. floop-1.2.0/tests/test_tokens.py +0 -1122
  54. {floop-1.2.0 → floop-2.0.0}/.github/workflows/release.yml +0 -0
  55. {floop-1.2.0 → floop-2.0.0}/.gitignore +0 -0
  56. {floop-1.2.0 → floop-2.0.0}/setup.cfg +0 -0
  57. {floop-1.2.0 → floop-2.0.0}/src/floop.egg-info/dependency_links.txt +0 -0
  58. {floop-1.2.0 → floop-2.0.0}/src/floop.egg-info/entry_points.txt +0 -0
  59. {floop-1.2.0 → floop-2.0.0}/src/floop.egg-info/requires.txt +0 -0
  60. {floop-1.2.0 → floop-2.0.0}/src/floop.egg-info/top_level.txt +0 -0
  61. {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
+ [![PyPI version](https://img.shields.io/pypi/v/floop?style=for-the-badge)](https://pypi.org/project/floop/)
21
+ [![Python](https://img.shields.io/pypi/pyversions/floop?style=for-the-badge)](https://pypi.org/project/floop/)
22
+ [![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)
23
+ [![Agents](https://img.shields.io/badge/agents-7%20supported-green?style=for-the-badge)](#supported-agents)
24
+ [![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen?style=for-the-badge)](#)
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
+ [![Star History Chart](https://api.star-history.com/svg?repos=lijma/floop-client&type=Date)](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
+ [![PyPI version](https://img.shields.io/pypi/v/floop?style=for-the-badge)](https://pypi.org/project/floop/)
6
+ [![Python](https://img.shields.io/pypi/pyversions/floop?style=for-the-badge)](https://pypi.org/project/floop/)
7
+ [![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)
8
+ [![Agents](https://img.shields.io/badge/agents-7%20supported-green?style=for-the-badge)](#supported-agents)
9
+ [![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen?style=for-the-badge)](#)
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
+ [![Star History Chart](https://api.star-history.com/svg?repos=lijma/floop-client&type=Date)](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 = "AI-native prototype quality toolkit Agent Skill + review workflow CLI"
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"
@@ -1,4 +1,4 @@
1
- """floop — AI-native prototype quality toolkit."""
1
+ """floop-clientproject/version review loop for AI artifacts."""
2
2
 
3
3
  from importlib.metadata import PackageNotFoundError, version
4
4
 
@@ -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 prototype development. "
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 prototype workflow — always-on context"\n'
93
+ 'description: "floop-client review workflow — always-on context"\n'
95
94
  'globs: \n'
96
95
  'alwaysApply: true\n'
97
96
  '---\n\n'