flowfield-core 0.1.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 (274) hide show
  1. flowfield_core-0.1.0/.github/ISSUE_TEMPLATE/bug.yml +42 -0
  2. flowfield_core-0.1.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  3. flowfield_core-0.1.0/.github/ISSUE_TEMPLATE/feature.yml +26 -0
  4. flowfield_core-0.1.0/.github/workflows/tests.yml +116 -0
  5. flowfield_core-0.1.0/.github/workflows/workflow.yml +145 -0
  6. flowfield_core-0.1.0/.gitignore +22 -0
  7. flowfield_core-0.1.0/CHANGELOG.md +32 -0
  8. flowfield_core-0.1.0/CONTRIBUTING.md +162 -0
  9. flowfield_core-0.1.0/LICENSE +201 -0
  10. flowfield_core-0.1.0/Makefile +43 -0
  11. flowfield_core-0.1.0/PKG-INFO +85 -0
  12. flowfield_core-0.1.0/README.md +64 -0
  13. flowfield_core-0.1.0/docs/cli.mdx +131 -0
  14. flowfield_core-0.1.0/docs/concepts.mdx +72 -0
  15. flowfield_core-0.1.0/docs/docs.json +16 -0
  16. flowfield_core-0.1.0/docs/getting-started.mdx +83 -0
  17. flowfield_core-0.1.0/docs/images/board-overview.png +0 -0
  18. flowfield_core-0.1.0/docs/images/overview.png +0 -0
  19. flowfield_core-0.1.0/docs/installation.mdx +88 -0
  20. flowfield_core-0.1.0/docs/integrations/codex.mdx +60 -0
  21. flowfield_core-0.1.0/docs/integrations/overview.mdx +32 -0
  22. flowfield_core-0.1.0/docs/package.json +7 -0
  23. flowfield_core-0.1.0/docs/pnpm-lock.yaml +8198 -0
  24. flowfield_core-0.1.0/docs/pnpm-workspace.yaml +14 -0
  25. flowfield_core-0.1.0/docs/storage.mdx +71 -0
  26. flowfield_core-0.1.0/examples/harbor/.gitignore +2 -0
  27. flowfield_core-0.1.0/examples/harbor/README.md +7 -0
  28. flowfield_core-0.1.0/examples/harbor/harbor.py +15 -0
  29. flowfield_core-0.1.0/examples/harbor/sample.json +4 -0
  30. flowfield_core-0.1.0/examples/harbor/tests/test_cli.py +15 -0
  31. flowfield_core-0.1.0/hatch_build.py +36 -0
  32. flowfield_core-0.1.0/pyproject.toml +65 -0
  33. flowfield_core-0.1.0/scripts/check-install.py +336 -0
  34. flowfield_core-0.1.0/scripts/check_dist.py +116 -0
  35. flowfield_core-0.1.0/scripts/create-demo.py +205 -0
  36. flowfield_core-0.1.0/scripts/create-integration-demo.py +188 -0
  37. flowfield_core-0.1.0/scripts/create-review-demo.py +200 -0
  38. flowfield_core-0.1.0/scripts/generate-api-types.py +42 -0
  39. flowfield_core-0.1.0/scripts/release.py +231 -0
  40. flowfield_core-0.1.0/scripts/serve-ui-demo.py +477 -0
  41. flowfield_core-0.1.0/src/flowfield/__init__.py +5 -0
  42. flowfield_core-0.1.0/src/flowfield/__main__.py +3 -0
  43. flowfield_core-0.1.0/src/flowfield/_web/assets/CodeDiff-a_9JU8OX.js +18 -0
  44. flowfield_core-0.1.0/src/flowfield/_web/assets/CodeDiff-legcy4jI.css +1 -0
  45. flowfield_core-0.1.0/src/flowfield/_web/assets/index-BvxlSzP9.css +2 -0
  46. flowfield_core-0.1.0/src/flowfield/_web/assets/index-Bw_suLer.js +100 -0
  47. flowfield_core-0.1.0/src/flowfield/_web/assets/react-remove-scroll-bar-license.txt +21 -0
  48. flowfield_core-0.1.0/src/flowfield/_web/assets/shadcn-license.txt +21 -0
  49. flowfield_core-0.1.0/src/flowfield/_web/assets/tailwindcss-license.txt +21 -0
  50. flowfield_core-0.1.0/src/flowfield/_web/assets/third-party-licenses.md +3471 -0
  51. flowfield_core-0.1.0/src/flowfield/_web/index.html +14 -0
  52. flowfield_core-0.1.0/src/flowfield/activity.py +78 -0
  53. flowfield_core-0.1.0/src/flowfield/activity_text.py +37 -0
  54. flowfield_core-0.1.0/src/flowfield/actors.py +34 -0
  55. flowfield_core-0.1.0/src/flowfield/adapters/README.md +24 -0
  56. flowfield_core-0.1.0/src/flowfield/adapters/activity_diff.py +36 -0
  57. flowfield_core-0.1.0/src/flowfield/adapters/codex_activity.py +84 -0
  58. flowfield_core-0.1.0/src/flowfield/adapters/codex_connection.py +186 -0
  59. flowfield_core-0.1.0/src/flowfield/adapters/codex_environment.py +140 -0
  60. flowfield_core-0.1.0/src/flowfield/adapters/codex_worker.py +431 -0
  61. flowfield_core-0.1.0/src/flowfield/adapters/git_checkout.py +216 -0
  62. flowfield_core-0.1.0/src/flowfield/adapters/git_integration.py +211 -0
  63. flowfield_core-0.1.0/src/flowfield/adapters/git_review.py +122 -0
  64. flowfield_core-0.1.0/src/flowfield/adapters/inspection_launcher.py +26 -0
  65. flowfield_core-0.1.0/src/flowfield/adapters/local_environment.py +262 -0
  66. flowfield_core-0.1.0/src/flowfield/adapters/toolchain.py +74 -0
  67. flowfield_core-0.1.0/src/flowfield/api.py +284 -0
  68. flowfield_core-0.1.0/src/flowfield/application.py +1606 -0
  69. flowfield_core-0.1.0/src/flowfield/attention.py +217 -0
  70. flowfield_core-0.1.0/src/flowfield/browser.py +268 -0
  71. flowfield_core-0.1.0/src/flowfield/changes.py +41 -0
  72. flowfield_core-0.1.0/src/flowfield/cli.py +1628 -0
  73. flowfield_core-0.1.0/src/flowfield/client.py +51 -0
  74. flowfield_core-0.1.0/src/flowfield/context_api.py +174 -0
  75. flowfield_core-0.1.0/src/flowfield/conversation.py +310 -0
  76. flowfield_core-0.1.0/src/flowfield/conversation_api.py +160 -0
  77. flowfield_core-0.1.0/src/flowfield/environment_models.py +86 -0
  78. flowfield_core-0.1.0/src/flowfield/errors.py +9 -0
  79. flowfield_core-0.1.0/src/flowfield/execution.py +934 -0
  80. flowfield_core-0.1.0/src/flowfield/execution_api.py +116 -0
  81. flowfield_core-0.1.0/src/flowfield/execution_cli.py +308 -0
  82. flowfield_core-0.1.0/src/flowfield/execution_history.py +174 -0
  83. flowfield_core-0.1.0/src/flowfield/execution_mcp.py +285 -0
  84. flowfield_core-0.1.0/src/flowfield/execution_models.py +195 -0
  85. flowfield_core-0.1.0/src/flowfield/guidance.py +474 -0
  86. flowfield_core-0.1.0/src/flowfield/input_delivery.py +183 -0
  87. flowfield_core-0.1.0/src/flowfield/inspection.py +203 -0
  88. flowfield_core-0.1.0/src/flowfield/inspection_api.py +40 -0
  89. flowfield_core-0.1.0/src/flowfield/inspection_models.py +64 -0
  90. flowfield_core-0.1.0/src/flowfield/integration.py +559 -0
  91. flowfield_core-0.1.0/src/flowfield/integration_api.py +95 -0
  92. flowfield_core-0.1.0/src/flowfield/integration_cli.py +170 -0
  93. flowfield_core-0.1.0/src/flowfield/integration_models.py +113 -0
  94. flowfield_core-0.1.0/src/flowfield/mcp.py +671 -0
  95. flowfield_core-0.1.0/src/flowfield/migrations.py +53 -0
  96. flowfield_core-0.1.0/src/flowfield/notification_api.py +121 -0
  97. flowfield_core-0.1.0/src/flowfield/notifications.py +219 -0
  98. flowfield_core-0.1.0/src/flowfield/project_config.py +80 -0
  99. flowfield_core-0.1.0/src/flowfield/publication.py +112 -0
  100. flowfield_core-0.1.0/src/flowfield/question_api.py +74 -0
  101. flowfield_core-0.1.0/src/flowfield/questions.py +683 -0
  102. flowfield_core-0.1.0/src/flowfield/reads.py +878 -0
  103. flowfield_core-0.1.0/src/flowfield/replies.py +282 -0
  104. flowfield_core-0.1.0/src/flowfield/reply_models.py +45 -0
  105. flowfield_core-0.1.0/src/flowfield/result_actions.py +220 -0
  106. flowfield_core-0.1.0/src/flowfield/result_api.py +91 -0
  107. flowfield_core-0.1.0/src/flowfield/result_brief.py +67 -0
  108. flowfield_core-0.1.0/src/flowfield/result_models.py +103 -0
  109. flowfield_core-0.1.0/src/flowfield/results.py +614 -0
  110. flowfield_core-0.1.0/src/flowfield/review_models.py +33 -0
  111. flowfield_core-0.1.0/src/flowfield/run_activity.py +174 -0
  112. flowfield_core-0.1.0/src/flowfield/search.py +247 -0
  113. flowfield_core-0.1.0/src/flowfield/setup_validation.py +274 -0
  114. flowfield_core-0.1.0/src/flowfield/stage_models.py +59 -0
  115. flowfield_core-0.1.0/src/flowfield/stage_view.py +43 -0
  116. flowfield_core-0.1.0/src/flowfield/stages.py +137 -0
  117. flowfield_core-0.1.0/src/flowfield/state.py +10 -0
  118. flowfield_core-0.1.0/src/flowfield/storage.py +469 -0
  119. flowfield_core-0.1.0/src/flowfield/storage_cli.py +85 -0
  120. flowfield_core-0.1.0/src/flowfield/supervisor.py +794 -0
  121. flowfield_core-0.1.0/src/flowfield/templates/agents-section.md +22 -0
  122. flowfield_core-0.1.0/src/flowfield/templates/flowfield-coordinator/SKILL.md +145 -0
  123. flowfield_core-0.1.0/src/flowfield/templates/mcp-instructions.md +29 -0
  124. flowfield_core-0.1.0/src/flowfield/thread_view.py +237 -0
  125. flowfield_core-0.1.0/src/flowfield/update_cli.py +76 -0
  126. flowfield_core-0.1.0/src/flowfield/updates.py +290 -0
  127. flowfield_core-0.1.0/src/flowfield/work_state.py +182 -0
  128. flowfield_core-0.1.0/src/flowfield/worker_context.py +207 -0
  129. flowfield_core-0.1.0/tests/activity_browser_fixture.py +131 -0
  130. flowfield_core-0.1.0/tests/conftest.py +8 -0
  131. flowfield_core-0.1.0/tests/fake_codex.py +30 -0
  132. flowfield_core-0.1.0/tests/fixtures/schema_29.sql +138 -0
  133. flowfield_core-0.1.0/tests/input_browser_fixture.py +55 -0
  134. flowfield_core-0.1.0/tests/inspection_browser_fixture.py +79 -0
  135. flowfield_core-0.1.0/tests/notification_browser_fixture.py +17 -0
  136. flowfield_core-0.1.0/tests/outcome_browser_fixture.py +87 -0
  137. flowfield_core-0.1.0/tests/project_fixtures.py +15 -0
  138. flowfield_core-0.1.0/tests/test_activity.py +227 -0
  139. flowfield_core-0.1.0/tests/test_activity_display.py +124 -0
  140. flowfield_core-0.1.0/tests/test_api.py +41 -0
  141. flowfield_core-0.1.0/tests/test_attention.py +121 -0
  142. flowfield_core-0.1.0/tests/test_browser_reads.py +142 -0
  143. flowfield_core-0.1.0/tests/test_changes.py +48 -0
  144. flowfield_core-0.1.0/tests/test_checkout_delivery.py +177 -0
  145. flowfield_core-0.1.0/tests/test_cli.py +108 -0
  146. flowfield_core-0.1.0/tests/test_codex_connection.py +131 -0
  147. flowfield_core-0.1.0/tests/test_codex_worker.py +120 -0
  148. flowfield_core-0.1.0/tests/test_connection.py +353 -0
  149. flowfield_core-0.1.0/tests/test_context_reads.py +214 -0
  150. flowfield_core-0.1.0/tests/test_conversation.py +487 -0
  151. flowfield_core-0.1.0/tests/test_dependencies.py +242 -0
  152. flowfield_core-0.1.0/tests/test_execution.py +315 -0
  153. flowfield_core-0.1.0/tests/test_execution_history.py +61 -0
  154. flowfield_core-0.1.0/tests/test_feed_presentation.py +107 -0
  155. flowfield_core-0.1.0/tests/test_git_review.py +196 -0
  156. flowfield_core-0.1.0/tests/test_guidance.py +298 -0
  157. flowfield_core-0.1.0/tests/test_handoff.py +129 -0
  158. flowfield_core-0.1.0/tests/test_input_continuation.py +355 -0
  159. flowfield_core-0.1.0/tests/test_inspection.py +544 -0
  160. flowfield_core-0.1.0/tests/test_integration.py +476 -0
  161. flowfield_core-0.1.0/tests/test_local_environment.py +159 -0
  162. flowfield_core-0.1.0/tests/test_milestone_keys.py +65 -0
  163. flowfield_core-0.1.0/tests/test_notifications.py +174 -0
  164. flowfield_core-0.1.0/tests/test_outcomes.py +212 -0
  165. flowfield_core-0.1.0/tests/test_parallel_recovery.py +210 -0
  166. flowfield_core-0.1.0/tests/test_project_setup.py +172 -0
  167. flowfield_core-0.1.0/tests/test_publication.py +325 -0
  168. flowfield_core-0.1.0/tests/test_questions.py +462 -0
  169. flowfield_core-0.1.0/tests/test_release.py +208 -0
  170. flowfield_core-0.1.0/tests/test_replies.py +380 -0
  171. flowfield_core-0.1.0/tests/test_result_recovery.py +357 -0
  172. flowfield_core-0.1.0/tests/test_results.py +348 -0
  173. flowfield_core-0.1.0/tests/test_run_activity.py +155 -0
  174. flowfield_core-0.1.0/tests/test_search.py +185 -0
  175. flowfield_core-0.1.0/tests/test_setup_validation.py +286 -0
  176. flowfield_core-0.1.0/tests/test_stage_view.py +72 -0
  177. flowfield_core-0.1.0/tests/test_state_policy.py +23 -0
  178. flowfield_core-0.1.0/tests/test_storage_migrations.py +422 -0
  179. flowfield_core-0.1.0/tests/test_supervisor.py +345 -0
  180. flowfield_core-0.1.0/tests/test_task_keys.py +157 -0
  181. flowfield_core-0.1.0/tests/test_task_preparation.py +193 -0
  182. flowfield_core-0.1.0/tests/test_updates.py +238 -0
  183. flowfield_core-0.1.0/tests/test_worker_bridge.py +43 -0
  184. flowfield_core-0.1.0/tests/test_workflow.py +391 -0
  185. flowfield_core-0.1.0/uv.lock +1013 -0
  186. flowfield_core-0.1.0/web/.prettierignore +4 -0
  187. flowfield_core-0.1.0/web/THIRD_PARTY.md +18 -0
  188. flowfield_core-0.1.0/web/components.json +21 -0
  189. flowfield_core-0.1.0/web/e2e/server.mjs +44 -0
  190. flowfield_core-0.1.0/web/e2e/smoke.spec.ts +5868 -0
  191. flowfield_core-0.1.0/web/eslint.config.js +15 -0
  192. flowfield_core-0.1.0/web/index.html +13 -0
  193. flowfield_core-0.1.0/web/package.json +50 -0
  194. flowfield_core-0.1.0/web/playwright.config.ts +29 -0
  195. flowfield_core-0.1.0/web/pnpm-lock.yaml +5125 -0
  196. flowfield_core-0.1.0/web/pnpm-workspace.yaml +1 -0
  197. flowfield_core-0.1.0/web/public/assets/react-remove-scroll-bar-license.txt +21 -0
  198. flowfield_core-0.1.0/web/public/assets/shadcn-license.txt +21 -0
  199. flowfield_core-0.1.0/web/public/assets/tailwindcss-license.txt +21 -0
  200. flowfield_core-0.1.0/web/src/Activity.tsx +47 -0
  201. flowfield_core-0.1.0/web/src/App.tsx +1143 -0
  202. flowfield_core-0.1.0/web/src/AttentionBoard.tsx +179 -0
  203. flowfield_core-0.1.0/web/src/AttentionCard.tsx +45 -0
  204. flowfield_core-0.1.0/web/src/BrowserNotices.tsx +59 -0
  205. flowfield_core-0.1.0/web/src/CodeDiff.tsx +318 -0
  206. flowfield_core-0.1.0/web/src/ConfirmButton.tsx +80 -0
  207. flowfield_core-0.1.0/web/src/Decisions.tsx +377 -0
  208. flowfield_core-0.1.0/web/src/DetailLayout.tsx +154 -0
  209. flowfield_core-0.1.0/web/src/DiscardChangesDialog.tsx +56 -0
  210. flowfield_core-0.1.0/web/src/EntityOverlay.tsx +126 -0
  211. flowfield_core-0.1.0/web/src/Inbox.tsx +582 -0
  212. flowfield_core-0.1.0/web/src/Inspection.tsx +185 -0
  213. flowfield_core-0.1.0/web/src/Integration.tsx +553 -0
  214. flowfield_core-0.1.0/web/src/Markdown.tsx +135 -0
  215. flowfield_core-0.1.0/web/src/MilestoneBadge.tsx +39 -0
  216. flowfield_core-0.1.0/web/src/MilestoneEditor.tsx +135 -0
  217. flowfield_core-0.1.0/web/src/Milestones.tsx +70 -0
  218. flowfield_core-0.1.0/web/src/NewTask.tsx +138 -0
  219. flowfield_core-0.1.0/web/src/Notifications.tsx +381 -0
  220. flowfield_core-0.1.0/web/src/Presentation.tsx +210 -0
  221. flowfield_core-0.1.0/web/src/ProjectEditor.tsx +223 -0
  222. flowfield_core-0.1.0/web/src/ProjectGuidance.tsx +151 -0
  223. flowfield_core-0.1.0/web/src/ProjectNameLink.tsx +37 -0
  224. flowfield_core-0.1.0/web/src/QuestionLink.tsx +47 -0
  225. flowfield_core-0.1.0/web/src/Result.tsx +446 -0
  226. flowfield_core-0.1.0/web/src/ReviewChecks.tsx +104 -0
  227. flowfield_core-0.1.0/web/src/RunActivity.tsx +180 -0
  228. flowfield_core-0.1.0/web/src/Runs.tsx +305 -0
  229. flowfield_core-0.1.0/web/src/SetupInstructions.tsx +53 -0
  230. flowfield_core-0.1.0/web/src/StageSequence.tsx +44 -0
  231. flowfield_core-0.1.0/web/src/TaskActions.tsx +138 -0
  232. flowfield_core-0.1.0/web/src/TaskChanges.tsx +108 -0
  233. flowfield_core-0.1.0/web/src/TaskConversation.tsx +875 -0
  234. flowfield_core-0.1.0/web/src/TaskDetail.tsx +192 -0
  235. flowfield_core-0.1.0/web/src/TaskLinks.tsx +47 -0
  236. flowfield_core-0.1.0/web/src/TaskNeeds.tsx +126 -0
  237. flowfield_core-0.1.0/web/src/TaskPriority.tsx +37 -0
  238. flowfield_core-0.1.0/web/src/Timestamp.tsx +61 -0
  239. flowfield_core-0.1.0/web/src/TooltipLink.tsx +26 -0
  240. flowfield_core-0.1.0/web/src/UsageSummary.tsx +25 -0
  241. flowfield_core-0.1.0/web/src/WorkState.tsx +50 -0
  242. flowfield_core-0.1.0/web/src/Workers.tsx +309 -0
  243. flowfield_core-0.1.0/web/src/WorkspaceLink.tsx +17 -0
  244. flowfield_core-0.1.0/web/src/api-schema.ts +8135 -0
  245. flowfield_core-0.1.0/web/src/components/ui/LICENSE.md +21 -0
  246. flowfield_core-0.1.0/web/src/components/ui/README.md +17 -0
  247. flowfield_core-0.1.0/web/src/components/ui/alert.tsx +65 -0
  248. flowfield_core-0.1.0/web/src/components/ui/badge.tsx +47 -0
  249. flowfield_core-0.1.0/web/src/components/ui/button.tsx +63 -0
  250. flowfield_core-0.1.0/web/src/components/ui/card.tsx +91 -0
  251. flowfield_core-0.1.0/web/src/components/ui/dialog.tsx +158 -0
  252. flowfield_core-0.1.0/web/src/components/ui/input.tsx +20 -0
  253. flowfield_core-0.1.0/web/src/components/ui/label.tsx +21 -0
  254. flowfield_core-0.1.0/web/src/components/ui/native-select.tsx +61 -0
  255. flowfield_core-0.1.0/web/src/components/ui/separator.tsx +25 -0
  256. flowfield_core-0.1.0/web/src/components/ui/sheet.tsx +142 -0
  257. flowfield_core-0.1.0/web/src/components/ui/sidebar.tsx +722 -0
  258. flowfield_core-0.1.0/web/src/components/ui/skeleton.tsx +13 -0
  259. flowfield_core-0.1.0/web/src/components/ui/tabs.tsx +88 -0
  260. flowfield_core-0.1.0/web/src/components/ui/textarea.tsx +17 -0
  261. flowfield_core-0.1.0/web/src/components/ui/tooltip.tsx +56 -0
  262. flowfield_core-0.1.0/web/src/detail-layout.css +366 -0
  263. flowfield_core-0.1.0/web/src/hooks/use-mobile.ts +14 -0
  264. flowfield_core-0.1.0/web/src/main.tsx +30 -0
  265. flowfield_core-0.1.0/web/src/navigation.ts +217 -0
  266. flowfield_core-0.1.0/web/src/style.css +1362 -0
  267. flowfield_core-0.1.0/web/src/theme.css +81 -0
  268. flowfield_core-0.1.0/web/src/useFeedScroll.ts +144 -0
  269. flowfield_core-0.1.0/web/src/useInspectionSettings.ts +51 -0
  270. flowfield_core-0.1.0/web/src/useRecordEditor.tsx +152 -0
  271. flowfield_core-0.1.0/web/src/useResource.ts +93 -0
  272. flowfield_core-0.1.0/web/src/workspace.ts +77 -0
  273. flowfield_core-0.1.0/web/tsconfig.json +21 -0
  274. flowfield_core-0.1.0/web/vite.config.ts +19 -0
@@ -0,0 +1,42 @@
1
+ name: Bug report
2
+ description: Report a problem with Flowfield.
3
+ labels: [bug]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: |
8
+ Search existing issues first. Remove secrets and private project content from anything you share.
9
+ For a security vulnerability, use [private reporting](https://github.com/flowfield-sh/flowfield-core/security/advisories/new).
10
+ - type: input
11
+ id: version
12
+ attributes:
13
+ label: Flowfield version
14
+ description: Run `flowfield --version`.
15
+ validations:
16
+ required: true
17
+ - type: input
18
+ id: environment
19
+ attributes:
20
+ label: Environment
21
+ description: Operating system, Python version, and installation method (uv, pip, or source).
22
+ validations:
23
+ required: true
24
+ - type: textarea
25
+ id: reproduction
26
+ attributes:
27
+ label: Steps to reproduce
28
+ description: Give the smallest example that reproduces the problem.
29
+ validations:
30
+ required: true
31
+ - type: textarea
32
+ id: behavior
33
+ attributes:
34
+ label: Expected and actual behavior
35
+ description: What did you expect, and what happened instead?
36
+ validations:
37
+ required: true
38
+ - type: textarea
39
+ id: evidence
40
+ attributes:
41
+ label: Logs or screenshots
42
+ description: Optional supporting evidence, with secrets and private content removed.
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Getting Started
4
+ url: https://github.com/flowfield-sh/flowfield-core/blob/main/docs/getting-started.mdx
5
+ about: Install Flowfield, connect your coding agent, and review a task.
6
+ - name: Report a security vulnerability
7
+ url: https://github.com/flowfield-sh/flowfield-core/security/advisories/new
8
+ about: Send a private report to the maintainers.
@@ -0,0 +1,26 @@
1
+ name: Feature request
2
+ description: Describe an outcome Flowfield could help you achieve.
3
+ labels: [enhancement]
4
+ body:
5
+ - type: markdown
6
+ attributes:
7
+ value: Search existing issues first. Keep examples free of secrets and private project content.
8
+ - type: textarea
9
+ id: problem
10
+ attributes:
11
+ label: Problem
12
+ description: What are you trying to do, and what gets in the way?
13
+ validations:
14
+ required: true
15
+ - type: textarea
16
+ id: outcome
17
+ attributes:
18
+ label: Desired outcome
19
+ description: What would a useful result look like?
20
+ validations:
21
+ required: true
22
+ - type: textarea
23
+ id: ideas
24
+ attributes:
25
+ label: Ideas or alternatives
26
+ description: Optional approaches or workarounds you have considered.
@@ -0,0 +1,116 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ workflow_dispatch:
9
+ workflow_call:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: tests-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ env:
19
+ FLOWFIELD_UPDATE_CHECKS: '0'
20
+ UV_NO_SYNC: '1'
21
+
22
+ jobs:
23
+ backend:
24
+ name: Python 3.12 / ${{ matrix.os }}
25
+ runs-on: ${{ matrix.os }}
26
+ timeout-minutes: 20
27
+ strategy:
28
+ fail-fast: false
29
+ matrix:
30
+ os: [ubuntu-24.04, macos-15]
31
+ steps:
32
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
33
+ with:
34
+ persist-credentials: false
35
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
36
+ with:
37
+ version: '0.9.26'
38
+ python-version: '3.12'
39
+ enable-cache: true
40
+ - run: uv sync --locked
41
+ - run: uv run --no-sync pytest
42
+
43
+ quality:
44
+ name: Quality, docs and installed packages
45
+ runs-on: ubuntu-24.04
46
+ timeout-minutes: 20
47
+ steps:
48
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
49
+ with:
50
+ persist-credentials: false
51
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
52
+ with:
53
+ version: '0.9.26'
54
+ python-version: '3.12'
55
+ enable-cache: true
56
+ - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
57
+ with:
58
+ node-version: '24'
59
+ - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
60
+ with:
61
+ version: '11.19.0'
62
+ - run: make setup
63
+ - name: Python quality and API contract
64
+ run: |
65
+ uv run --no-sync ruff format --check .
66
+ uv run --no-sync ruff check .
67
+ uv run --no-sync mypy
68
+ uv run --no-sync python scripts/generate-api-types.py --check
69
+ - run: pnpm --dir web check
70
+ - run: make docs
71
+ - run: make build check-dist
72
+ - run: uv publish --dry-run --trusted-publishing never dist/*.whl dist/*.tar.gz
73
+
74
+ browser:
75
+ name: Chromium journeys
76
+ runs-on: ubuntu-24.04
77
+ timeout-minutes: 15
78
+ steps:
79
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
80
+ with:
81
+ persist-credentials: false
82
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
83
+ with:
84
+ version: '0.9.26'
85
+ python-version: '3.12'
86
+ enable-cache: true
87
+ - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
88
+ with:
89
+ node-version: '24'
90
+ - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
91
+ with:
92
+ version: '11.19.0'
93
+ - run: uv sync --locked
94
+ - run: pnpm --dir web install --frozen-lockfile
95
+ - run: pnpm --dir web exec playwright install --with-deps chromium
96
+ - run: make smoke
97
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
98
+ if: failure()
99
+ with:
100
+ name: browser-failures
101
+ path: web/test-results/
102
+ retention-days: 7
103
+
104
+ checked:
105
+ name: All checks passed
106
+ if: always()
107
+ needs: [backend, quality, browser]
108
+ runs-on: ubuntu-24.04
109
+ timeout-minutes: 2
110
+ steps:
111
+ - name: Require every check
112
+ env:
113
+ BACKEND: ${{ needs.backend.result }}
114
+ QUALITY: ${{ needs.quality.result }}
115
+ BROWSER: ${{ needs.browser.result }}
116
+ run: test "$BACKEND" = success && test "$QUALITY" = success && test "$BROWSER" = success
@@ -0,0 +1,145 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ['v*']
6
+ # Manual runs on main rehearse the exact release artifacts without publishing.
7
+ workflow_dispatch:
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ concurrency:
13
+ group: release-${{ github.ref }}
14
+ cancel-in-progress: false
15
+
16
+ env:
17
+ FLOWFIELD_UPDATE_CHECKS: '0'
18
+ UV_NO_SYNC: '1'
19
+
20
+ jobs:
21
+ checks:
22
+ uses: ./.github/workflows/tests.yml
23
+
24
+ build:
25
+ needs: checks
26
+ runs-on: ubuntu-24.04
27
+ timeout-minutes: 15
28
+ outputs:
29
+ version: ${{ steps.identity.outputs.version }}
30
+ steps:
31
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
32
+ with:
33
+ fetch-depth: 0
34
+ persist-credentials: false
35
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
36
+ with:
37
+ version: '0.9.26'
38
+ python-version: '3.12'
39
+ - run: uv sync --locked
40
+ - name: Verify release identity and reviewed notes
41
+ id: identity
42
+ run: uv run --no-sync python scripts/release.py --check-ci
43
+ - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
44
+ with:
45
+ node-version: '24'
46
+ - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
47
+ with:
48
+ version: '11.19.0'
49
+ - run: pnpm --dir web install --frozen-lockfile
50
+ - run: make build
51
+ - run: uv publish --dry-run --trusted-publishing never dist/*.whl dist/*.tar.gz
52
+ - name: Record distribution checksums
53
+ working-directory: dist
54
+ run: shasum -a 256 ./*.whl ./*.tar.gz > ../SHA256SUMS
55
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
56
+ with:
57
+ name: release-assets
58
+ path: |
59
+ dist/*.whl
60
+ dist/*.tar.gz
61
+ release-notes.md
62
+ SHA256SUMS
63
+ scripts/check_dist.py
64
+ scripts/check-install.py
65
+ if-no-files-found: error
66
+ retention-days: 30
67
+
68
+ installed:
69
+ name: Release installs / ${{ matrix.os }}
70
+ needs: build
71
+ runs-on: ${{ matrix.os }}
72
+ timeout-minutes: 15
73
+ strategy:
74
+ fail-fast: false
75
+ matrix:
76
+ os: [ubuntu-24.04, macos-15]
77
+ steps:
78
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
79
+ with:
80
+ name: release-assets
81
+ - name: Verify original artifact bytes
82
+ working-directory: dist
83
+ run: shasum -a 256 -c ../SHA256SUMS
84
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
85
+ with:
86
+ version: '0.9.26'
87
+ python-version: '3.12'
88
+ - name: Exercise pip wheel/source and uv tool installations without a checkout
89
+ env:
90
+ RELEASE_VERSION: ${{ needs.build.outputs.version }}
91
+ run: uv run --no-project --python 3.12 python scripts/check_dist.py --version "$RELEASE_VERSION"
92
+
93
+ pypi:
94
+ if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
95
+ needs: [build, installed]
96
+ runs-on: ubuntu-24.04
97
+ timeout-minutes: 10
98
+ environment:
99
+ name: pypi
100
+ url: https://pypi.org/project/flowfield-core/
101
+ permissions:
102
+ contents: read
103
+ id-token: write
104
+ steps:
105
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
106
+ with:
107
+ name: release-assets
108
+ - name: Verify original artifact bytes
109
+ working-directory: dist
110
+ run: shasum -a 256 -c ../SHA256SUMS
111
+ - uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
112
+ with:
113
+ version: '0.9.26'
114
+ - name: Publish verified distributions; identical files may be retried
115
+ run: >-
116
+ uv publish --trusted-publishing always
117
+ --publish-url https://upload.pypi.org/legacy/
118
+ --check-url https://pypi.org/simple dist/*.whl dist/*.tar.gz
119
+
120
+ github:
121
+ needs: pypi
122
+ runs-on: ubuntu-24.04
123
+ timeout-minutes: 5
124
+ permissions:
125
+ contents: write
126
+ steps:
127
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
128
+ with:
129
+ name: release-assets
130
+ - name: Verify original artifact bytes
131
+ working-directory: dist
132
+ run: shasum -a 256 -c ../SHA256SUMS
133
+ - name: Publish GitHub Release after PyPI succeeds
134
+ env:
135
+ GH_TOKEN: ${{ github.token }}
136
+ GH_REPO: ${{ github.repository }}
137
+ RELEASE_TAG: ${{ github.ref_name }}
138
+ run: |
139
+ if ! gh release view "$RELEASE_TAG" >/dev/null 2>&1; then
140
+ gh release create "$RELEASE_TAG" --verify-tag --draft \
141
+ --title "Flowfield $RELEASE_TAG" --notes-file release-notes.md
142
+ fi
143
+ gh release upload "$RELEASE_TAG" dist/*.whl dist/*.tar.gz SHA256SUMS --clobber
144
+ gh release edit "$RELEASE_TAG" --draft=false --notes-file release-notes.md
145
+ printf 'Published flowfield-core and GitHub release %s\n' "$RELEASE_TAG" >> "$GITHUB_STEP_SUMMARY"
@@ -0,0 +1,22 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.py[cod]
4
+ .pytest_cache/
5
+ .mypy_cache/
6
+ .ruff_cache/
7
+ dist/
8
+ *.egg-info/
9
+ node_modules/
10
+ src/flowfield/_web/
11
+ web/test-results/
12
+ web/playwright-report/
13
+ .DS_Store
14
+ .env
15
+ .env.*
16
+ !.env.example
17
+ .work/
18
+ .idea/
19
+ site/
20
+ docs/.mintlify/
21
+ release-notes.md
22
+ SHA256SUMS
@@ -0,0 +1,32 @@
1
+ # Changelog
2
+
3
+ Reviewed release notes describe changes by user impact. See CONTRIBUTING.md for versioning
4
+ and release preparation. A version heading becomes a release when its package is published.
5
+
6
+ ## 0.1.0
7
+
8
+ Initial Flowfield release: a shared task feed and workspace for agent software development.
9
+
10
+ - Adopt existing repositories and keep task intent, activity, questions, answers and results
11
+ together in a durable conversation. Group tasks into milestones and track dependencies.
12
+ - Use the board and Needs you to prioritize work, answer questions and review results.
13
+ - Run independent tasks in isolated Git checkouts with configurable worker capacity and
14
+ a paused-by-default queue. Codex is the first supported worker harness.
15
+ - Inspect and try an exact result, then explicitly approve delivery into the project checkout.
16
+ Changed code or destination requires fresh approval; checkout blockers retain approval.
17
+ - Connect coordinators through MCP and installed project guidance. The CLI and web app use
18
+ the same local service and persisted workspace.
19
+ - Preserve work through tested schema upgrades with verified database snapshots and guarded
20
+ offline recovery. Existing supported Flowfield schemas 29 and 30 upgrade to schema 31.
21
+ - Share persistent notifications and dismissals across browsers and restarts. Check for
22
+ compatible PyPI releases on web startup, hourly or manually, with release links and
23
+ uv/pip upgrade instructions.
24
+
25
+ Install with `uv tool install --python 3.12 flowfield-core`, or pip in a dedicated Python
26
+ environment. The package bundles its browser UI and agent guidance. macOS and Linux with
27
+ Python 3.12 are the release test targets; managed work requires an installed, signed-in
28
+ Codex CLI. Additional harnesses are planned.
29
+
30
+ **Upgrade:** stop Flowfield before changing versions and restart afterward. Supported database
31
+ migrations run automatically after a verified snapshot; the queue starts paused. Read the installation and storage docs
32
+ before upgrading and retain a full workspace backup for artifacts and disaster recovery.
@@ -0,0 +1,162 @@
1
+ # Issues and development
2
+
3
+ Bug reports, feedback and feature requests are welcome in [GitHub Issues](https://github.com/flowfield-sh/flowfield-core/issues).
4
+ We are not accepting external pull requests at this time.
5
+
6
+ For a bug, include the Flowfield version, operating system, steps to reproduce, expected
7
+ behavior and actual behavior. Remove secrets and private project content from logs or screenshots.
8
+ Report potential vulnerabilities using [private security reporting](SECURITY.md).
9
+
10
+ ## Follow development
11
+
12
+ Maintainers track public work with the **progress** label: one issue per user-facing outcome,
13
+ with a short scope and completion criteria. Status is **Planned**, **In progress**,
14
+ **Implemented**, or **Released**. Implemented means the code is on main; Released names
15
+ the published version and links its release notes.
16
+
17
+ Updates describe meaningful progress or a blocker and link relevant code. Progress issues
18
+ stay open until released, or close with an explanation if the work is cancelled. Bug reports
19
+ and feature requests can link the relevant progress issue.
20
+
21
+ A progress issue uses this shape:
22
+
23
+ ```md
24
+ ## Outcome
25
+ What this lets people do.
26
+
27
+ ## Done when
28
+ - Observable completion criteria.
29
+
30
+ ## Status
31
+ In progress
32
+
33
+ ## Implementation
34
+ Links to code when implemented.
35
+
36
+ ## Release
37
+ Version and release link when published.
38
+ ```
39
+
40
+ ## Develop locally
41
+
42
+ Python 3.12+, uv, Node 24+ and pnpm 11.19.0 are required.
43
+
44
+ ```sh
45
+ make setup
46
+ make check
47
+ pnpm --dir web exec playwright install chromium
48
+ make smoke
49
+ make build
50
+ ```
51
+
52
+ `make check` runs Python formatting, lint, types and deterministic tests, generated API
53
+ type validation, frontend checks/build, and Mintlify validation/link checks. `make smoke`
54
+ runs Chromium against the built application. `make build` produces a wheel and source
55
+ archive with the compiled UI. Both install without Node, pnpm or a checkout at runtime.
56
+ Use `scripts/check-install.py` from a clean installed environment to exercise the package.
57
+ `make check-dist` installs both distributions through pip and the wheel through isolated
58
+ `uv tool install`, then exercises each installed application outside the checkout.
59
+
60
+ For frontend development, run `uv run flowfield serve` and `pnpm --dir web dev` in separate
61
+ terminals. API wire types are generated with `make api-types`. Application operations live
62
+ under `src/flowfield/`; harness-specific behavior belongs in `src/flowfield/adapters/`.
63
+
64
+ Ordinary checks use isolated disposable state and never launch live model calls.
65
+
66
+ ## Database changes
67
+
68
+ Schema 29 is the immutable initialization baseline, captured in
69
+ `tests/fixtures/schema_29.sql`. Append each schema change to the ordered registry in
70
+ `src/flowfield/migrations.py`; do not edit previous migrations or the baseline SQL.
71
+ Migration callbacks change only the database using `execute`/`executemany`. The storage
72
+ owner controls the transaction, version, migration history and pre-upgrade snapshot;
73
+ callbacks must not commit, use `executescript`, or mutate project files or artifacts.
74
+
75
+ Test fresh initialization and upgrading populated fixtures, including failure rollback,
76
+ interruption, restart and preserved application bindings. Keep application writes inside
77
+ `Workspace.connection()` so recovery can detect newer work. Automatic snapshots cover
78
+ the database; full workspace backups remain separate.
79
+
80
+ ## Documentation
81
+
82
+ Mintlify content and configuration live in `docs/`. Its CLI is pinned and locked locally:
83
+
84
+ ```sh
85
+ make docs
86
+ make docs-serve
87
+ ```
88
+
89
+ `make docs` validates the build and internal links. `make docs-serve` starts a local
90
+ preview. Hosted deployment uses the `docs/` subdirectory and its `docs.json` configuration.
91
+ Keep user documentation concise and accurate for the behavior being released.
92
+ Mintlify builds `docs/` from the `docs` branch. Advance that branch to the reviewed release
93
+ commit after publication, using a normal fast-forward push, then verify the hosted pages.
94
+ Feature development continues on main.
95
+
96
+ ## Versioning and releases
97
+
98
+ The first release is **0.1.0**. `pyproject.toml` owns the version; uv keeps its entry in
99
+ `uv.lock` aligned. Tags use `vX.Y.Z`. During 0.x, patches contain compatible fixes;
100
+ minor releases contain new capabilities or breaking changes, with explicit upgrade notes.
101
+ From 1.0 onward, Semantic Versioning applies: major for breaking changes, minor for
102
+ compatible features, patch for compatible fixes. Compatibility covers documented CLI/MCP
103
+ interfaces, integration guidance and persisted workspace state. Schema changes still need
104
+ tested migrations and recovery; a version bump does not permit discarding user state.
105
+
106
+ Every push to main runs the `Tests` workflow: Python 3.12 tests on Linux/macOS, Python and
107
+ frontend quality checks, generated API validation, Mintlify validation, Chromium journeys
108
+ and clean installed-package checks. Live model calls are separate from CI.
109
+
110
+ ### Prepare and rehearse
111
+
112
+ Review all commits and the aggregate diff since the last published release, then write a
113
+ nonempty `## X.Y.Z` section in `CHANGELOG.md`, newest first. Include features, fixes and
114
+ upgrade requirements by user impact. Preserve previous entries and verify each claim against
115
+ implementation, documentation and checks. Commit reviewed notes before releasing.
116
+
117
+ ```sh
118
+ make setup
119
+ pnpm --dir web exec playwright install chromium
120
+ make release-check
121
+ uv run --no-sync python scripts/release.py 0.1.0 --dry-run
122
+ ```
123
+
124
+ `release-check` runs local checks, browser journeys, clean builds, pip wheel/source and uv tool
125
+ installation checks, and distribution metadata validation. Build clears the generated `dist/`
126
+ directory. The preview checks branch, clean state, remotes, version, notes and unused tags,
127
+ and prints outgoing commits; it does not run checks or change files/refs.
128
+
129
+ The `Release` workflow in `.github/workflows/workflow.yml` also supports a manual run on
130
+ main. It runs CI, builds distributions once, and verifies those same artifacts on Linux/macOS.
131
+ Manual runs stop after verification. Artifacts and checksums remain available for 30 days.
132
+
133
+ ### Publish
134
+
135
+ Configure the PyPI Trusted Publisher for owner `flowfield-sh`, repository `flowfield-core`,
136
+ workflow `workflow.yml` and environment `pypi`. The matching GitHub environment permits only
137
+ tags matching `v*`. Publishing uses short-lived GitHub identity tokens.
138
+
139
+ After reviewing the preparation and explicitly authorizing publication, run from clean main:
140
+
141
+ ```sh
142
+ uv run --no-sync python scripts/release.py 0.1.0
143
+ ```
144
+
145
+ The command holds a repository release lock, checks identity/notes, bumps only the version
146
+ files when needed, runs verification, and commits those version files. It rechecks the
147
+ remote and atomically pushes main and the annotated tag, then watches the release run.
148
+ CI requires the tag to match package/lock metadata and identify a commit on main. Only
149
+ the tag-triggered publishing job uses the `pypi` environment and OIDC permission. It publishes
150
+ verified original artifacts, then publishes the GitHub Release with reviewed notes and checksums.
151
+ Check actual PyPI installation, update discovery and GitHub assets after publication.
152
+
153
+ ### Recover
154
+
155
+ Failures preserve local state and completed steps. Never move a published tag or rebuild an
156
+ uploaded version. Before tagging, correct and review retained changes, then retry. Exit 75
157
+ means another local release owns the lock. If push fails, inspect local and remote refs before
158
+ retrying the same atomic push. If CI fails, inspect the existing run; source corrections need
159
+ a new commit/version/tag. For partial upload or GitHub failure, rerun only failed jobs to reuse
160
+ the original artifacts. Do not rerun the build after uploading. uv skips already uploaded
161
+ identical files; GitHub completes the existing draft/assets. Expired artifacts require recovering
162
+ and verifying the exact originals. A bad published release needs a new version.