cursorfleet 0.1.0__tar.gz → 0.1.1__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 (286) hide show
  1. cursorfleet-0.1.1/.github/workflows/container.yml +50 -0
  2. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/.github/workflows/release.yml +29 -0
  3. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/CHANGELOG.md +15 -1
  4. cursorfleet-0.1.1/Dockerfile +11 -0
  5. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/PKG-INFO +38 -15
  6. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/README.md +34 -12
  7. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/b0-live-validation-2026-10-12.md +2 -2
  8. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/external-alpha-results.md +2 -1
  9. cursorfleet-0.1.1/docs/evidence/pypi-trusted-publishing-setup.md +36 -0
  10. cursorfleet-0.1.1/docs/evidence/release-v0.1.0-owner-runbook.md +31 -0
  11. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/v0.1.1-backlog.md +1 -1
  12. cursorfleet-0.1.1/docs/evidence/v01-release-baseline.md +14 -0
  13. cursorfleet-0.1.1/docs/evidence/v01-release-ready.md +23 -0
  14. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/quickstart.md +3 -2
  15. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/status.md +2 -1
  16. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/getting-started/installation.md +14 -8
  17. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/index.md +4 -2
  18. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/pyproject.toml +4 -3
  19. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/__init__.py +1 -1
  20. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/app.py +25 -0
  21. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/help.py +1 -1
  22. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/views.py +39 -5
  23. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/tui/test_tui_app.py +42 -0
  24. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/uv.lock +1 -1
  25. cursorfleet-0.1.0/docs/evidence/pypi-trusted-publishing-setup.md +0 -30
  26. cursorfleet-0.1.0/docs/evidence/v01-release-baseline.md +0 -14
  27. cursorfleet-0.1.0/docs/evidence/v01-release-ready.md +0 -28
  28. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/.cursor/rules/privacy-and-hooks.mdc +0 -0
  29. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/.cursor/rules/python-conventions.mdc +0 -0
  30. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/.github/workflows/ci.yml +0 -0
  31. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/.github/workflows/pages.yml +0 -0
  32. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/.gitignore +0 -0
  33. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/AGENTS.md +0 -0
  34. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/CONTRIBUTING.md +0 -0
  35. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/LICENSE +0 -0
  36. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/SECURITY.md +0 -0
  37. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/.gitkeep +0 -0
  38. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0000-template.md +0 -0
  39. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0001-cursor-capabilities.md +0 -0
  40. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0002-storage-layout-and-runtime-directory.md +0 -0
  41. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0003-event-model-and-sanitization.md +0 -0
  42. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0004-no-chain-of-thought-and-hook-policy.md +0 -0
  43. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0005-naming-and-trademark.md +0 -0
  44. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0006-agent-declared-events.md +0 -0
  45. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0007-narrower-v01-hook-policy.md +0 -0
  46. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0008-enforcement-boundaries.md +0 -0
  47. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0009-install-uninstall-ownership.md +0 -0
  48. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0010-reducer-state-semantics.md +0 -0
  49. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0011-evidence-trust-model.md +0 -0
  50. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0012-roster-and-worktree-ownership.md +0 -0
  51. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/0013-run-metadata-and-association.md +0 -0
  52. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/adr/README.md +0 -0
  53. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/architecture.md +0 -0
  54. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/demo.md +0 -0
  55. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/docs-site-plan.md +0 -0
  56. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/empirical-test-plan.md +0 -0
  57. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/a2-contract-decision-matrix.md +0 -0
  58. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/a2-hook-matrix.md +0 -0
  59. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/adr-0005-naming-gate.md +0 -0
  60. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/b0-run-association-spike.md +0 -0
  61. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/b1-prototype-signoff.md +0 -0
  62. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/dogfood-week.md +0 -0
  63. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/latency-13b-linux-ide.md +0 -0
  64. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/live-validation-index.md +0 -0
  65. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/product-hunt-gate.md +0 -0
  66. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/so01-permission-hooks.md +0 -0
  67. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/v01-adr-truth-table.md +0 -0
  68. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/evidence/v01-doc-allowlist.json +0 -0
  69. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/external-alpha.md +0 -0
  70. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/follow-ups.md +0 -0
  71. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/governance.md +0 -0
  72. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/hook-latency.md +0 -0
  73. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/kit.md +0 -0
  74. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/platform-support.md +0 -0
  75. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/privacy.md +0 -0
  76. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/product-contract.md +0 -0
  77. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/release-checklist.md +0 -0
  78. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/security-review-v0.1.md +0 -0
  79. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/spike-prep.md +0 -0
  80. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/status-json.md +0 -0
  81. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/threat-model.md +0 -0
  82. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/docs/tui.md +0 -0
  83. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/.meta.yml +0 -0
  84. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/assets/apple-touch-icon.png +0 -0
  85. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/assets/cursorfleet-icon-source.png +0 -0
  86. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/assets/cursorfleet-wordmark.png +0 -0
  87. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/assets/favicon-32.png +0 -0
  88. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/assets/logo-circle.png +0 -0
  89. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/assets/og-card.png +0 -0
  90. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/changelog.md +0 -0
  91. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/cli/doctor.md +0 -0
  92. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/cli/init.md +0 -0
  93. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/cli/status.md +0 -0
  94. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/cli/validate.md +0 -0
  95. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/concepts/agents-and-events.md +0 -0
  96. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/concepts/sessions.md +0 -0
  97. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/concepts/worktrees.md +0 -0
  98. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/contributing.md +0 -0
  99. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/getting-started/quickstart.md +0 -0
  100. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/known-limitations.md +0 -0
  101. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/overrides/main.html +0 -0
  102. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/privacy-and-security.md +0 -0
  103. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/stylesheets/site-brand.css +0 -0
  104. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/tui/current-status.md +0 -0
  105. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/public-docs/tui/overview.md +0 -0
  106. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/schemas/.gitkeep +0 -0
  107. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/schemas/config.schema.json +0 -0
  108. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/schemas/event.schema.json +0 -0
  109. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/schemas/policy.schema.json +0 -0
  110. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/schemas/roster.schema.json +0 -0
  111. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/scripts/bench_hook.py +0 -0
  112. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/scripts/check_dist.py +0 -0
  113. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/scripts/demo.py +0 -0
  114. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/scripts/demo.sh +0 -0
  115. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/scripts/gen_schemas.py +0 -0
  116. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/scripts/smoke_wheel.py +0 -0
  117. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/README.md +0 -0
  118. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/analyze.py +0 -0
  119. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/bench_latency.py +0 -0
  120. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/capture_hook.py +0 -0
  121. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/README.md +0 -0
  122. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/afterFileEdit.doc-derived.json +0 -0
  123. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/afterShellExecution.doc-derived.json +0 -0
  124. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/beforeShellExecution.doc-derived.json +0 -0
  125. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/postToolUse.doc-derived.json +0 -0
  126. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/postToolUseFailure.doc-derived.json +0 -0
  127. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/preCompact.doc-derived.json +0 -0
  128. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/preToolUse.doc-derived.json +0 -0
  129. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/sessionEnd.doc-derived.json +0 -0
  130. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/sessionStart.doc-derived.json +0 -0
  131. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/stop.doc-derived.json +0 -0
  132. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/subagentStart.doc-derived.json +0 -0
  133. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/doc_examples/subagentStop.doc-derived.json +0 -0
  134. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/hooks.json.example +0 -0
  135. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/hooks.windows.json.example +0 -0
  136. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/questions.md +0 -0
  137. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/spike/results/latency-linux.json +0 -0
  138. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/__init__.py +0 -0
  139. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/__init__.py +0 -0
  140. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/blocks.py +0 -0
  141. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/diagnostics.py +0 -0
  142. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/fsutil.py +0 -0
  143. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/hook_main.py +0 -0
  144. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/hook_normalize.py +0 -0
  145. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/hook_policy.py +0 -0
  146. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/hook_sanitize.py +0 -0
  147. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/hooksjson.py +0 -0
  148. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/installer.py +0 -0
  149. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/kit.py +0 -0
  150. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/kit_probe.py +0 -0
  151. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/lock.py +0 -0
  152. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/templates.py +0 -0
  153. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/validation.py +0 -0
  154. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/adapters/cursor/workspace.py +0 -0
  155. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/__init__.py +0 -0
  156. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/__init__.py +0 -0
  157. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/_common.py +0 -0
  158. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/_resolution.py +0 -0
  159. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/doctor.py +0 -0
  160. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/events.py +0 -0
  161. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/index.py +0 -0
  162. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/init.py +0 -0
  163. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/migrate.py +0 -0
  164. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/replay.py +0 -0
  165. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/run.py +0 -0
  166. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/status.py +0 -0
  167. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/tui.py +0 -0
  168. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/uninstall.py +0 -0
  169. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/commands/validate.py +0 -0
  170. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/cli/main.py +0 -0
  171. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/config/__init__.py +0 -0
  172. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/config/io.py +0 -0
  173. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/config/models.py +0 -0
  174. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/config/roster.py +0 -0
  175. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/events/__init__.py +0 -0
  176. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/events/forbidden.py +0 -0
  177. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/events/ids.py +0 -0
  178. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/events/kinds.py +0 -0
  179. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/events/models.py +0 -0
  180. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/events/pathcheck.py +0 -0
  181. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/git/__init__.py +0 -0
  182. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/git/collector.py +0 -0
  183. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/git/runner.py +0 -0
  184. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/git/worktrees.py +0 -0
  185. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/policy/__init__.py +0 -0
  186. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/py.typed +0 -0
  187. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/safeexe.py +0 -0
  188. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/schema_gen.py +0 -0
  189. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/__init__.py +0 -0
  190. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/artifact_scan.py +0 -0
  191. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/context.py +0 -0
  192. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/event_store.py +0 -0
  193. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/indexer.py +0 -0
  194. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/lock.py +0 -0
  195. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/models.py +0 -0
  196. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/reducer.py +0 -0
  197. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/retention.py +0 -0
  198. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/run_builder.py +0 -0
  199. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/run_model.py +0 -0
  200. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/run_store.py +0 -0
  201. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/runtime.py +0 -0
  202. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/spool.py +0 -0
  203. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/spool_read.py +0 -0
  204. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/state/status_doc.py +0 -0
  205. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/__init__.py +0 -0
  206. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/data.py +0 -0
  207. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/filters.py +0 -0
  208. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/gates.py +0 -0
  209. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/layout.py +0 -0
  210. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/theme.py +0 -0
  211. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/tui/watch.py +0 -0
  212. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/workflow/__init__.py +0 -0
  213. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/workflow/artifacts.py +0 -0
  214. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/src/cursorfleet/workflow/frontmatter.py +0 -0
  215. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents/architect.md +0 -0
  216. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents/implementer.md +0 -0
  217. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents/patcher.md +0 -0
  218. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents/qa.md +0 -0
  219. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents/reviewer.md +0 -0
  220. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents/scout.md +0 -0
  221. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents/tester.md +0 -0
  222. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents-md/root.md +0 -0
  223. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/agents-md/work.md +0 -0
  224. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/config/config.toml +0 -0
  225. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/hooks/entry.json +0 -0
  226. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/rules/cursorfleet-core.mdc +0 -0
  227. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/rules/cursorfleet-handoff.mdc +0 -0
  228. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/skills/cursorfleet-artifacts/SKILL.md +0 -0
  229. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/templates/cursor/skills/cursorfleet-coordinator/SKILL.md +0 -0
  230. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/conftest.py +0 -0
  231. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/event_factory.py +0 -0
  232. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/fixtures/cursor/.gitkeep +0 -0
  233. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/fixtures/cursor/legacy_test_completed.jsonl +0 -0
  234. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/fixtures/cursor/post_m25_verification_observed.jsonl +0 -0
  235. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/fixtures/status/status.v1.golden.json +0 -0
  236. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_cli_state.py +0 -0
  237. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_doctor_validate_resolution.py +0 -0
  238. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_git_collector.py +0 -0
  239. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_hook_main.py +0 -0
  240. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_kit_doctor_validate.py +0 -0
  241. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_kit_init_uninstall.py +0 -0
  242. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_runtime_inheritance.py +0 -0
  243. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_runtime_resolution.py +0 -0
  244. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/integration/test_spool_migration.py +0 -0
  245. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/kit_helpers.py +0 -0
  246. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/m2_helpers.py +0 -0
  247. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/m2_strategies.py +0 -0
  248. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/perf/test_hook_benchmark.py +0 -0
  249. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_event_privacy.py +0 -0
  250. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_hook_policy.py +0 -0
  251. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_hook_privacy.py +0 -0
  252. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_hook_redos.py +0 -0
  253. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_hostile_repo.py +0 -0
  254. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_kit_installer_policy.py +0 -0
  255. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_no_network.py +0 -0
  256. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_runtime_trust.py +0 -0
  257. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/security/test_terminal_injection.py +0 -0
  258. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/tui/test_tui_cli.py +0 -0
  259. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/tui/test_tui_data.py +0 -0
  260. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/tui/test_tui_gates.py +0 -0
  261. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/tui/test_tui_privacy.py +0 -0
  262. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/tui_helpers.py +0 -0
  263. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_artifact_scan.py +0 -0
  264. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_cli.py +0 -0
  265. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_config_models.py +0 -0
  266. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_event_models.py +0 -0
  267. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_event_store.py +0 -0
  268. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_fs_names.py +0 -0
  269. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_hook_normalize.py +0 -0
  270. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_hook_sanitize.py +0 -0
  271. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_ids.py +0 -0
  272. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_indexer.py +0 -0
  273. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_kit_blocks.py +0 -0
  274. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_kit_frontmatter.py +0 -0
  275. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_kit_hooksjson.py +0 -0
  276. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_kit_probe.py +0 -0
  277. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_kit_templates.py +0 -0
  278. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_reducer.py +0 -0
  279. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_retention.py +0 -0
  280. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_roster.py +0 -0
  281. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_run_builder.py +0 -0
  282. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_run_store.py +0 -0
  283. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_schemas.py +0 -0
  284. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_spike_analyze.py +0 -0
  285. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/tests/unit/test_spool.py +0 -0
  286. {cursorfleet-0.1.0 → cursorfleet-0.1.1}/zensical.toml +0 -0
@@ -0,0 +1,50 @@
1
+ name: Container (GHCR)
2
+
3
+ # PyPI wheels do not appear under github.com/.../packages; this workflow publishes
4
+ # ghcr.io/<owner>/cursorfleet so the repo shows a linked container package.
5
+
6
+ on:
7
+ workflow_dispatch:
8
+ inputs:
9
+ version:
10
+ description: "cursorfleet PyPI version (e.g. 0.1.0)"
11
+ required: true
12
+ default: "0.1.0"
13
+ tag:
14
+ description: "Extra GHCR tag (defaults to version; use latest to also tag latest)"
15
+ required: false
16
+ default: ""
17
+
18
+ permissions:
19
+ contents: read
20
+ packages: write
21
+
22
+ jobs:
23
+ publish:
24
+ name: publish ghcr.io image
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - name: Resolve image tags
29
+ id: meta
30
+ run: |
31
+ version="${{ inputs.version }}"
32
+ extra="${{ inputs.tag }}"
33
+ tags="ghcr.io/${GITHUB_REPOSITORY,,}:${version}"
34
+ if [ "${extra}" = "latest" ] || [ "${version}" = "0.1.0" ]; then
35
+ tags="${tags},ghcr.io/${GITHUB_REPOSITORY,,}:latest"
36
+ elif [ -n "${extra}" ]; then
37
+ tags="${tags},ghcr.io/${GITHUB_REPOSITORY,,}:${extra}"
38
+ fi
39
+ echo "tags=${tags}" >> "$GITHUB_OUTPUT"
40
+ - uses: docker/login-action@v3
41
+ with:
42
+ registry: ghcr.io
43
+ username: ${{ github.actor }}
44
+ password: ${{ secrets.GITHUB_TOKEN }}
45
+ - uses: docker/build-push-action@v6
46
+ with:
47
+ context: .
48
+ push: true
49
+ tags: ${{ steps.meta.outputs.tags }}
50
+ build-args: CURSORFLEET_VERSION=${{ inputs.version }}
@@ -104,3 +104,32 @@ jobs:
104
104
  name: dist
105
105
  path: dist/
106
106
  - uses: pypa/gh-action-pypi-publish@release/v1
107
+
108
+ publish-container:
109
+ name: publish container (GHCR)
110
+ runs-on: ubuntu-latest
111
+ needs: publish-pypi
112
+ if: vars.RELEASE_ENABLED == 'true'
113
+ permissions:
114
+ contents: read
115
+ packages: write
116
+ steps:
117
+ - uses: actions/checkout@v4
118
+ - name: Package version from tag
119
+ id: ver
120
+ run: |
121
+ echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
122
+ echo "image=ghcr.io/${GITHUB_REPOSITORY,,}" >> "$GITHUB_OUTPUT"
123
+ - uses: docker/login-action@v3
124
+ with:
125
+ registry: ghcr.io
126
+ username: ${{ github.actor }}
127
+ password: ${{ secrets.GITHUB_TOKEN }}
128
+ - uses: docker/build-push-action@v6
129
+ with:
130
+ context: .
131
+ push: true
132
+ tags: |
133
+ ${{ steps.ver.outputs.image }}:${{ steps.ver.outputs.version }}
134
+ ${{ steps.ver.outputs.image }}:latest
135
+ build-args: CURSORFLEET_VERSION=${{ steps.ver.outputs.version }}
@@ -8,7 +8,21 @@ CursorFleet is an unofficial tool: it is not affiliated with or endorsed by Anys
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
- Development version `0.1.1.dev0` (post-v0.1.0). Planned: TUI attach picker, external alpha metrics.
11
+ Development on `main` after v0.1.1. Planned: external alpha metrics, evidence closure.
12
+
13
+ ## [0.1.1] - 2026-10-13
14
+
15
+ PyPI/README refresh and small UX fixes after the v0.1.0 launch.
16
+
17
+ ### Added
18
+
19
+ - TUI: attach suggested sessions from Active run (Enter).
20
+ - Optional `ghcr.io/m9nx/cursorfleet` container for GitHub Packages visibility.
21
+
22
+ ### Changed
23
+
24
+ - README and [docs site](https://m9nx.github.io/cursorfleet/) document PyPI install and v0.1.0 release status.
25
+ - PyPI `project.urls` Homepage/Documentation point at GitHub Pages.
12
26
 
13
27
  ## [0.1.0] - 2026-10-12
14
28
 
@@ -0,0 +1,11 @@
1
+ # Optional runtime image for GitHub Container Registry (ghcr.io).
2
+ # Primary install path remains PyPI: pip install cursorfleet
3
+ FROM python:3.12-slim-bookworm
4
+
5
+ ARG CURSORFLEET_VERSION
6
+ RUN test -n "${CURSORFLEET_VERSION}" || (echo "CURSORFLEET_VERSION build-arg required" >&2 && exit 1)
7
+
8
+ RUN pip install --no-cache-dir "cursorfleet==${CURSORFLEET_VERSION}"
9
+
10
+ ENTRYPOINT ["cursorfleet"]
11
+ CMD ["--help"]
@@ -1,13 +1,14 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: cursorfleet
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: Unofficial local TUI and workflow harness (observe-only) for Cursor agent teams.
5
- Project-URL: Homepage, https://github.com/M9nx/cursorfleet
6
- Project-URL: Documentation, https://github.com/M9nx/cursorfleet/tree/main/docs
5
+ Project-URL: Homepage, https://m9nx.github.io/cursorfleet/
6
+ Project-URL: Documentation, https://m9nx.github.io/cursorfleet/
7
7
  Project-URL: Source, https://github.com/M9nx/cursorfleet
8
8
  Project-URL: Issues, https://github.com/M9nx/cursorfleet/issues
9
9
  Project-URL: Changelog, https://github.com/M9nx/cursorfleet/blob/main/CHANGELOG.md
10
10
  Project-URL: Security, https://github.com/M9nx/cursorfleet/blob/main/SECURITY.md
11
+ Project-URL: Release notes, https://github.com/M9nx/cursorfleet/releases/tag/v0.1.1
11
12
  Author: M9nx
12
13
  License-Expression: MIT
13
14
  License-File: LICENSE
@@ -50,13 +51,16 @@ Description-Content-Type: text/markdown
50
51
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT" /></a>
51
52
  <img src="https://img.shields.io/badge/status-pre--alpha-orange.svg" alt="Status: pre-alpha" />
52
53
  <img src="https://img.shields.io/badge/python-3.11%2B-blue.svg" alt="Python 3.11+" />
53
- <a href="https://m9nx.github.io/cursorfleet/"><img src="https://img.shields.io/badge/docs-GitHub_Pages-222?style=flat-square&logo=github" alt="Documentation site" /></a>
54
+ <a href="https://pypi.org/project/cursorfleet/"><img src="https://img.shields.io/pypi/v/cursorfleet.svg" alt="PyPI version" /></a>
55
+ <a href="https://m9nx.github.io/cursorfleet/"><img src="https://img.shields.io/badge/docs-m9nx.github.io-222?style=flat-square&logo=readthedocs&logoColor=white" alt="Documentation site" /></a>
54
56
  </p>
55
57
 
56
58
  <p>
57
- <a href="https://m9nx.github.io/cursorfleet/">Website</a>
59
+ <a href="https://m9nx.github.io/cursorfleet/">Documentation</a>
58
60
  ·
59
- <a href="docs/quickstart.md">Quickstart</a>
61
+ <a href="https://pypi.org/project/cursorfleet/">PyPI</a>
62
+ ·
63
+ <a href="https://m9nx.github.io/cursorfleet/getting-started/quickstart/">Quickstart</a>
60
64
  ·
61
65
  <a href="docs/demo.md">Demo</a>
62
66
  ·
@@ -72,7 +76,9 @@ are doing what, from passive hooks and read-only git, without sending anything a
72
76
 
73
77
  ## Status
74
78
 
75
- **Pre-alpha, not released.** There is no PyPI package, tag or GitHub release yet.
79
+ **Pre-alpha.** **[v0.1.0](https://github.com/M9nx/cursorfleet/releases/tag/v0.1.0)** is on
80
+ [PyPI](https://pypi.org/project/cursorfleet/) and
81
+ [GitHub Releases](https://github.com/M9nx/cursorfleet/releases). Latest on PyPI: **0.1.1**; `main` may be ahead.
76
82
 
77
83
  - v0.1 is **Observe**: no enforcement, no forced approvals, and no cloud-agent visibility
78
84
  (local Cursor sessions only). It is not a security boundary: a malicious or prompt-injected
@@ -99,16 +105,29 @@ are doing what, from passive hooks and read-only git, without sending anything a
99
105
 
100
106
  ## Install
101
107
 
102
- Needs Python 3.11+ and git. Until it is published, install from a checkout:
108
+ Needs Python 3.11+ and git.
103
109
 
104
110
  ```bash
105
- git clone https://github.com/M9nx/cursorfleet && cd cursorfleet
106
- uv tool install . # or: pipx install .
111
+ uv tool install cursorfleet # or: pipx install cursorfleet
107
112
  cursorfleet --version
108
113
  ```
109
114
 
110
- (Once released: `uv tool install cursorfleet` or `pipx install cursorfleet`; see the
111
- [release checklist](docs/release-checklist.md).)
115
+ From a git checkout (contributors or unreleased `main`):
116
+
117
+ ```bash
118
+ git clone https://github.com/M9nx/cursorfleet && cd cursorfleet
119
+ uv tool install .
120
+ ```
121
+
122
+ See the [installation guide](https://m9nx.github.io/cursorfleet/getting-started/installation/)
123
+ on the docs site and the [release checklist](docs/release-checklist.md).
124
+
125
+ Optional container (shows under [GitHub Packages](https://github.com/M9nx?tab=packages&repo_name=cursorfleet);
126
+ install with pip for normal use):
127
+
128
+ ```bash
129
+ docker run --rm ghcr.io/m9nx/cursorfleet:0.1.0 --help
130
+ ```
112
131
 
113
132
  ## Quickstart
114
133
 
@@ -123,8 +142,9 @@ cursorfleet status --json # stable machine-readable snapshot for scr
123
142
  cursorfleet uninstall # remove exactly what init added
124
143
  ```
125
144
 
126
- Full walkthrough: [docs/quickstart.md](docs/quickstart.md). No Cursor handy? Run the
127
- [synthetic demo](docs/demo.md): `scripts/demo.sh`.
145
+ Full walkthrough: [Quickstart on the docs site](https://m9nx.github.io/cursorfleet/getting-started/quickstart/)
146
+ (in-repo: [docs/quickstart.md](docs/quickstart.md)). No Cursor handy? Run the
147
+ [synthetic demo](docs/demo.md) (`scripts/demo.sh`).
128
148
 
129
149
  Dashboard keys: `o` overview, `l` timeline, `w` worktrees, `g` gates, `e` evidence, `v`
130
150
  violations (v0.2 placeholder), `/` filter, `p` pin, `t` tiles (160+ columns), `r` re-read,
@@ -134,7 +154,10 @@ gate tiles are heuristic and non-authoritative, not proof that anything passed.
134
154
 
135
155
  ## Documentation
136
156
 
137
- [Quickstart](docs/quickstart.md) · [governance model](docs/governance.md) ·
157
+ **[Docs site (GitHub Pages)](https://m9nx.github.io/cursorfleet/)** — start with
158
+ [Getting started](https://m9nx.github.io/cursorfleet/getting-started/installation/).
159
+
160
+ In-repo: [Quickstart](docs/quickstart.md) · [governance model](docs/governance.md) ·
138
161
  [demo](docs/demo.md) · [kit reference](docs/kit.md) · [TUI](docs/tui.md) ·
139
162
  [`status --json`](docs/status-json.md) · [product contract](docs/product-contract.md) ·
140
163
  [architecture](docs/architecture.md) · [privacy](docs/privacy.md) ·
@@ -12,13 +12,16 @@
12
12
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT" /></a>
13
13
  <img src="https://img.shields.io/badge/status-pre--alpha-orange.svg" alt="Status: pre-alpha" />
14
14
  <img src="https://img.shields.io/badge/python-3.11%2B-blue.svg" alt="Python 3.11+" />
15
- <a href="https://m9nx.github.io/cursorfleet/"><img src="https://img.shields.io/badge/docs-GitHub_Pages-222?style=flat-square&logo=github" alt="Documentation site" /></a>
15
+ <a href="https://pypi.org/project/cursorfleet/"><img src="https://img.shields.io/pypi/v/cursorfleet.svg" alt="PyPI version" /></a>
16
+ <a href="https://m9nx.github.io/cursorfleet/"><img src="https://img.shields.io/badge/docs-m9nx.github.io-222?style=flat-square&logo=readthedocs&logoColor=white" alt="Documentation site" /></a>
16
17
  </p>
17
18
 
18
19
  <p>
19
- <a href="https://m9nx.github.io/cursorfleet/">Website</a>
20
+ <a href="https://m9nx.github.io/cursorfleet/">Documentation</a>
20
21
  ·
21
- <a href="docs/quickstart.md">Quickstart</a>
22
+ <a href="https://pypi.org/project/cursorfleet/">PyPI</a>
23
+ ·
24
+ <a href="https://m9nx.github.io/cursorfleet/getting-started/quickstart/">Quickstart</a>
22
25
  ·
23
26
  <a href="docs/demo.md">Demo</a>
24
27
  ·
@@ -34,7 +37,9 @@ are doing what, from passive hooks and read-only git, without sending anything a
34
37
 
35
38
  ## Status
36
39
 
37
- **Pre-alpha, not released.** There is no PyPI package, tag or GitHub release yet.
40
+ **Pre-alpha.** **[v0.1.0](https://github.com/M9nx/cursorfleet/releases/tag/v0.1.0)** is on
41
+ [PyPI](https://pypi.org/project/cursorfleet/) and
42
+ [GitHub Releases](https://github.com/M9nx/cursorfleet/releases). Latest on PyPI: **0.1.1**; `main` may be ahead.
38
43
 
39
44
  - v0.1 is **Observe**: no enforcement, no forced approvals, and no cloud-agent visibility
40
45
  (local Cursor sessions only). It is not a security boundary: a malicious or prompt-injected
@@ -61,16 +66,29 @@ are doing what, from passive hooks and read-only git, without sending anything a
61
66
 
62
67
  ## Install
63
68
 
64
- Needs Python 3.11+ and git. Until it is published, install from a checkout:
69
+ Needs Python 3.11+ and git.
65
70
 
66
71
  ```bash
67
- git clone https://github.com/M9nx/cursorfleet && cd cursorfleet
68
- uv tool install . # or: pipx install .
72
+ uv tool install cursorfleet # or: pipx install cursorfleet
69
73
  cursorfleet --version
70
74
  ```
71
75
 
72
- (Once released: `uv tool install cursorfleet` or `pipx install cursorfleet`; see the
73
- [release checklist](docs/release-checklist.md).)
76
+ From a git checkout (contributors or unreleased `main`):
77
+
78
+ ```bash
79
+ git clone https://github.com/M9nx/cursorfleet && cd cursorfleet
80
+ uv tool install .
81
+ ```
82
+
83
+ See the [installation guide](https://m9nx.github.io/cursorfleet/getting-started/installation/)
84
+ on the docs site and the [release checklist](docs/release-checklist.md).
85
+
86
+ Optional container (shows under [GitHub Packages](https://github.com/M9nx?tab=packages&repo_name=cursorfleet);
87
+ install with pip for normal use):
88
+
89
+ ```bash
90
+ docker run --rm ghcr.io/m9nx/cursorfleet:0.1.0 --help
91
+ ```
74
92
 
75
93
  ## Quickstart
76
94
 
@@ -85,8 +103,9 @@ cursorfleet status --json # stable machine-readable snapshot for scr
85
103
  cursorfleet uninstall # remove exactly what init added
86
104
  ```
87
105
 
88
- Full walkthrough: [docs/quickstart.md](docs/quickstart.md). No Cursor handy? Run the
89
- [synthetic demo](docs/demo.md): `scripts/demo.sh`.
106
+ Full walkthrough: [Quickstart on the docs site](https://m9nx.github.io/cursorfleet/getting-started/quickstart/)
107
+ (in-repo: [docs/quickstart.md](docs/quickstart.md)). No Cursor handy? Run the
108
+ [synthetic demo](docs/demo.md) (`scripts/demo.sh`).
90
109
 
91
110
  Dashboard keys: `o` overview, `l` timeline, `w` worktrees, `g` gates, `e` evidence, `v`
92
111
  violations (v0.2 placeholder), `/` filter, `p` pin, `t` tiles (160+ columns), `r` re-read,
@@ -96,7 +115,10 @@ gate tiles are heuristic and non-authoritative, not proof that anything passed.
96
115
 
97
116
  ## Documentation
98
117
 
99
- [Quickstart](docs/quickstart.md) · [governance model](docs/governance.md) ·
118
+ **[Docs site (GitHub Pages)](https://m9nx.github.io/cursorfleet/)** — start with
119
+ [Getting started](https://m9nx.github.io/cursorfleet/getting-started/installation/).
120
+
121
+ In-repo: [Quickstart](docs/quickstart.md) · [governance model](docs/governance.md) ·
100
122
  [demo](docs/demo.md) · [kit reference](docs/kit.md) · [TUI](docs/tui.md) ·
101
123
  [`status --json`](docs/status-json.md) · [product contract](docs/product-contract.md) ·
102
124
  [architecture](docs/architecture.md) · [privacy](docs/privacy.md) ·
@@ -1,7 +1,7 @@
1
1
  # B0 live validation (maintainer)
2
2
 
3
- Status: **checklist for owner** — fill during Linux Cursor IDE session before calling v0.1.0
4
- **product-accepted** for scenarios 1, 2, and 5.
3
+ Status: **checklist for owner** — fill during Linux Cursor IDE session before **PyPI publish**
4
+ (`RELEASE_ENABLED`). Tag `v0.1.0` is already on GitHub; scenarios 1, 2, and 5 gate product claims.
5
5
 
6
6
  | Field | Value |
7
7
  | --- | --- |
@@ -2,7 +2,8 @@
2
2
 
3
3
  Status: **not started** (2026-10-12).
4
4
 
5
- v0.1.0 release decision: external alpha is **post-tag** (see [`../status.md`](../status.md)).
5
+ v0.1.0 is **tagged**; run external alpha after PyPI install path is available (see
6
+ [`../external-alpha.md`](../external-alpha.md), [`v0.1.1-backlog.md`](v0.1.1-backlog.md)).
6
7
  Metrics from [`../external-alpha.md`](../external-alpha.md) will be recorded here when testers run.
7
8
 
8
9
  | Metric | Target | Result |
@@ -0,0 +1,36 @@
1
+ # PyPI Trusted Publishing setup (owner)
2
+
3
+ Status: **GitHub configured** (2026-10-12): `pypi` environment with required reviewer `M9nx`, `RELEASE_ENABLED=true`. **PyPI pending publisher** still required in UI (see below).
4
+
5
+ ## PyPI project (first time) — **you must do this in the browser**
6
+
7
+ Log in at [pypi.org](https://pypi.org) as **M9nx**, then **Account settings → Publishing** (or [manage/account/publishing](https://pypi.org/manage/account/publishing/)) → **Add a new pending publisher**. Values must match GitHub OIDC exactly (from failed run `38301917759`):
8
+
9
+ | Field | Value |
10
+ | --- | --- |
11
+ | PyPI Project Name | `cursorfleet` (new project; created on first upload) |
12
+ | Owner | `M9nx` |
13
+ | Repository name | `cursorfleet` |
14
+ | Workflow name | `release.yml` |
15
+ | Environment name | `pypi` |
16
+
17
+ Save the publisher, then re-run the failed **publish to PyPI** job on the latest [Release workflow](https://github.com/M9nx/cursorfleet/actions/workflows/release.yml) for tag `v0.1.0` and approve the **`pypi`** environment again.
18
+
19
+ ## GitHub repository
20
+
21
+ Done on `M9nx/cursorfleet`:
22
+
23
+ 1. Environment **`pypi`** with required reviewer **M9nx**.
24
+ 2. Repository variable **`RELEASE_ENABLED`** = **`true`** (kill switch in [release.yml](../../.github/workflows/release.yml)).
25
+
26
+ Optional: tag ruleset for `v*`.
27
+
28
+ ## Release sequence
29
+
30
+ 1. All gates in [v01-release-ready.md](v01-release-ready.md) closed.
31
+ 2. Push tag `v0.1.0` matching [pyproject.toml](../../pyproject.toml) version.
32
+ 3. Workflow creates **draft** GitHub release with wheel/sdist.
33
+ 4. Approve **pypi** environment deployment after reviewing assets.
34
+ 5. Publish GitHub release notes manually.
35
+
36
+ Do **not** enable `RELEASE_ENABLED` until SO-01 and B0 live rows are PASS.
@@ -0,0 +1,31 @@
1
+ # v0.1.0 owner runbook (post-tag)
2
+
3
+ Use this after the agent/repo prep; order matches [v01-release-ready.md](v01-release-ready.md).
4
+
5
+ ## 1. Live Cursor (Linux IDE)
6
+
7
+ 1. Follow [quickstart §4](../quickstart.md) two-run recipe.
8
+ 2. Complete [b0-live-validation-2026-10-12.md](b0-live-validation-2026-10-12.md) scenarios 1, 2, 5.
9
+ 3. Record [so01-permission-hooks.md](so01-permission-hooks.md) for `preToolUse` and `subagentStart`.
10
+ 4. Run 13B paired measurement; fill [latency-13b-linux-ide.md](latency-13b-linux-ide.md).
11
+ 5. Optional: add sanitized [active-run-screenshot.png](active-run-screenshot.png) and link from public docs.
12
+
13
+ Commit evidence updates on `main` (signed commits).
14
+
15
+ ## 2. PyPI
16
+
17
+ 1. Re-check PyPI name `cursorfleet` ([adr-0005-naming-gate.md](adr-0005-naming-gate.md)).
18
+ 2. Complete [pypi-trusted-publishing-setup.md](pypi-trusted-publishing-setup.md).
19
+ 3. Set repository variable `RELEASE_ENABLED=true` only when ready.
20
+
21
+ ## 3. Publish
22
+
23
+ 1. Open the **draft** [GitHub release for v0.1.0](https://github.com/M9nx/cursorfleet/releases).
24
+ 2. Paste/edit notes from CHANGELOG `[0.1.0]`.
25
+ 3. Publish the GitHub release (not draft).
26
+ 4. Approve the **pypi** environment deployment for the tag workflow (or re-run publish job if needed).
27
+
28
+ ## 4. Post-publish
29
+
30
+ 1. Run [external alpha](../external-alpha.md); record [external-alpha-results.md](external-alpha-results.md).
31
+ 2. Track [v0.1.1-backlog.md](v0.1.1-backlog.md) (attach picker, etc.).
@@ -1,6 +1,6 @@
1
1
  # v0.1.1 backlog (post-v0.1.0)
2
2
 
3
- - TUI attach picker for suggested sessions (B0 scenario 5 UX)
3
+ - ~~TUI attach picker for suggested sessions (B0 scenario 5 UX)~~ — Active run: select suggested row, Enter to attach
4
4
  - Close B0 live validation checklist if still OPEN at tag time
5
5
  - SO-01 and latency 13B evidence if still OPEN
6
6
  - ADR 0006: optional `migrate artifacts --yes`, digest dedupe
@@ -0,0 +1,14 @@
1
+ # v0.1.0 release baseline
2
+
3
+ Last updated: 2026-10-12.
4
+
5
+ | Field | Value |
6
+ | --- | --- |
7
+ | `main` HEAD | `df919a4803e2c2139346367660e931ccc291f4ac` |
8
+ | Tag `v0.1.0` | `626db23` (0.1.0 tree + release-check mypy fixes) |
9
+ | Version on `main` | `0.1.1.dev0` |
10
+ | Tests (local) | 1010 passed, 1 deselected |
11
+ | CI `main` | Green on `df919a4` |
12
+ | Release workflow | Green on tag ([38298997744](https://github.com/M9nx/cursorfleet/actions/runs/38298997744)) |
13
+
14
+ Tracking: [`v01-adr-truth-table.md`](v01-adr-truth-table.md), [`v01-release-ready.md`](v01-release-ready.md).
@@ -0,0 +1,23 @@
1
+ # v0.1.0 tag readiness
2
+
3
+ Last updated: 2026-10-12 (`main` at `df919a4`, tag `v0.1.0` → `626db23`).
4
+
5
+ ## Shipped
6
+
7
+ | Item | Status |
8
+ | --- | --- |
9
+ | CI on `main` | Green ([workflow](https://github.com/M9nx/cursorfleet/actions/workflows/ci.yml)) |
10
+ | Tag `v0.1.0` | Pushed; Release workflow green ([run](https://github.com/M9nx/cursorfleet/actions/runs/38298997744)) |
11
+ | GitHub release | [CursorFleet v0.1.0](https://github.com/M9nx/cursorfleet/releases/tag/v0.1.0) published (wheel + sdist) |
12
+ | `main` development | `0.1.1.dev0` |
13
+ | Code/docs prep | Privacy default, run-scoped git, quickstart runs, ADR amendments, fixtures |
14
+
15
+ ## Before `RELEASE_ENABLED=true` and PyPI approve
16
+
17
+ 1. **B0 live** — [b0-live-validation-2026-10-12.md](b0-live-validation-2026-10-12.md) scenarios **1, 2, 5** + optional [active-run-screenshot.png](active-run-screenshot.png)
18
+ 2. **SO-01** — [so01-permission-hooks.md](so01-permission-hooks.md) on live Cursor
19
+ 3. **Latency 13B** — [latency-13b-linux-ide.md](latency-13b-linux-ide.md) or dated PARTIAL + platform narrow
20
+ 4. **PyPI** — [pypi-trusted-publishing-setup.md](pypi-trusted-publishing-setup.md) (`pypi` env, Trusted Publishing, day-of name check)
21
+ 5. **Publish** — GitHub release is live; set `RELEASE_ENABLED=true`, approve `pypi` job to upload PyPI
22
+
23
+ External alpha remains **post-PyPI** ([status.md](../status.md), [v0.1.1-backlog.md](v0.1.1-backlog.md)).
@@ -11,8 +11,9 @@
11
11
 
12
12
  ## 1. Install
13
13
 
14
- CursorFleet needs Python 3.11 or newer and `git`. It is **not on PyPI yet**; until the owner
15
- publishes it, install from a checkout or a built wheel.
14
+ CursorFleet needs Python 3.11 or newer and `git`. **v0.1.0** is tagged on GitHub; PyPI publish
15
+ awaits owner approval (`RELEASE_ENABLED`). Until then, install from a checkout, the draft release
16
+ assets, or a local wheel.
16
17
 
17
18
  ```bash
18
19
  # from a checkout (needs uv: https://docs.astral.sh/uv/)
@@ -1,6 +1,7 @@
1
1
  # Project status
2
2
 
3
- Last updated: 2026-10-12. CursorFleet is unofficial and pre-release; nothing is published on PyPI yet.
3
+ Last updated: 2026-10-12. CursorFleet is unofficial; **v0.1.0** is tagged on GitHub. PyPI publish
4
+ awaits `RELEASE_ENABLED` and owner approval (see [v01-release-ready.md](evidence/v01-release-ready.md)).
4
5
  Everything here was written and reviewed by the same author: it is a self-review, not an
5
6
  independent audit.
6
7
 
@@ -1,25 +1,31 @@
1
1
  # Installation
2
2
 
3
- CursorFleet needs **Python 3.11+** and **git**. It is **not on PyPI**. Until a
4
- release exists, install from a git checkout.
3
+ CursorFleet needs **Python 3.11+** and **git**.
5
4
 
6
5
  **Unofficial and pre-alpha.** CursorFleet is not affiliated with or endorsed by
7
6
  Anysphere or Cursor.
8
7
 
9
- ## From a checkout
8
+ ## From PyPI (recommended)
9
+
10
+ [v0.1.0](https://pypi.org/project/cursorfleet/) and later:
10
11
 
11
12
  ```bash
12
- git clone https://github.com/M9nx/cursorfleet && cd cursorfleet
13
- uv tool install . # or: pipx install .
13
+ uv tool install cursorfleet # or: pipx install cursorfleet
14
14
  cursorfleet --version
15
15
  ```
16
16
 
17
17
  `uv` is documented at [docs.astral.sh/uv](https://docs.astral.sh/uv/). `pipx`
18
18
  is an alternative for the same console scripts.
19
19
 
20
- Once a first release exists, the intended commands are
21
- `uv tool install cursorfleet` or `pipx install cursorfleet`. Those are **not**
22
- available yet.
20
+ ## From a checkout
21
+
22
+ For contributors or unreleased `main`:
23
+
24
+ ```bash
25
+ git clone https://github.com/M9nx/cursorfleet && cd cursorfleet
26
+ uv tool install . # or: pipx install .
27
+ cursorfleet --version
28
+ ```
23
29
 
24
30
  ## Check the hook entry point
25
31
 
@@ -18,8 +18,10 @@ Cursor. "Cursor" is a trademark of its respective owner. The name
18
18
 
19
19
  ## Status
20
20
 
21
- **Pre-alpha, not released.** There is no PyPI package, tag, or GitHub release.
22
- Install from a git checkout. See [Installation](getting-started/installation.md).
21
+ **Pre-alpha.** [v0.1.0](https://github.com/M9nx/cursorfleet/releases/tag/v0.1.0) is on
22
+ [PyPI](https://pypi.org/project/cursorfleet/) and
23
+ [GitHub Releases](https://github.com/M9nx/cursorfleet/releases). See
24
+ [Installation](getting-started/installation.md) (`pipx` / `uv tool install cursorfleet`).
23
25
 
24
26
  - v0.1 is **Observe** only: no enforcement, no forced approvals, and no
25
27
  cloud-agent visibility (local Cursor sessions only). It is not a security
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "cursorfleet"
7
- version = "0.1.0"
7
+ version = "0.1.1"
8
8
  description = "Unofficial local TUI and workflow harness (observe-only) for Cursor agent teams."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -40,12 +40,13 @@ dependencies = [
40
40
  watch = ["watchfiles>=0.21"]
41
41
 
42
42
  [project.urls]
43
- Homepage = "https://github.com/M9nx/cursorfleet"
44
- Documentation = "https://github.com/M9nx/cursorfleet/tree/main/docs"
43
+ Homepage = "https://m9nx.github.io/cursorfleet/"
44
+ Documentation = "https://m9nx.github.io/cursorfleet/"
45
45
  Source = "https://github.com/M9nx/cursorfleet"
46
46
  Issues = "https://github.com/M9nx/cursorfleet/issues"
47
47
  Changelog = "https://github.com/M9nx/cursorfleet/blob/main/CHANGELOG.md"
48
48
  Security = "https://github.com/M9nx/cursorfleet/blob/main/SECURITY.md"
49
+ "Release notes" = "https://github.com/M9nx/cursorfleet/releases/tag/v0.1.1"
49
50
 
50
51
  [project.scripts]
51
52
  cursorfleet = "cursorfleet.cli.main:app"
@@ -4,6 +4,6 @@ Keep this module import-free (stdlib only, no heavy imports): the hook hot path
4
4
  imports ``cursorfleet`` on every hook invocation.
5
5
  """
6
6
 
7
- __version__ = "0.1.0"
7
+ __version__ = "0.1.1"
8
8
 
9
9
  __all__ = ["__version__"]
@@ -26,6 +26,7 @@ from cursorfleet import __version__
26
26
  from cursorfleet.adapters.cursor.kit_probe import HooksKitState
27
27
  from cursorfleet.events.models import Event
28
28
  from cursorfleet.state.event_store import DEFAULT_PAGE, MAX_PAGE, EventFilter
29
+ from cursorfleet.state.run_store import attach_session
29
30
  from cursorfleet.tui import views
30
31
  from cursorfleet.tui.data import DataSource, FleetData
31
32
  from cursorfleet.tui.filters import parse_timeline_filter
@@ -522,11 +523,35 @@ class CursorFleetApp(App[None]):
522
523
  widget.action_cursor_down() if step > 0 else widget.action_cursor_up()
523
524
 
524
525
  def action_open_detail(self) -> None:
526
+ key = self._selected_key()
527
+ if (
528
+ self.view == "active_run"
529
+ and key is not None
530
+ and key.startswith("sug:")
531
+ and key != "ar:sug:h"
532
+ ):
533
+ self._attach_suggested_session(key[4:])
534
+ return
525
535
  if self._mode == SINGLE:
526
536
  self.detail_open = True
527
537
  self._apply_layout(self._width)
528
538
  self.query_one("#detail", VerticalScroll).focus()
529
539
 
540
+ def _attach_suggested_session(self, session_id: str) -> None:
541
+ run = self.data.primary_run
542
+ runtime = self.data.runtime_dir
543
+ if run is None or runtime is None:
544
+ self.flash("no active run")
545
+ return
546
+ if run.run_id.startswith("inferred:"):
547
+ self.flash("start a run first: cursorfleet run start --task <slug>")
548
+ return
549
+ if not attach_session(runtime, run.run_id, session_id):
550
+ self.flash("attach failed (archived or missing run)")
551
+ return
552
+ self.flash(f"attached {safe(session_id, 32)}")
553
+ self.run_worker(self.refresh_data(), exclusive=False)
554
+
530
555
  def action_pin(self) -> None:
531
556
  key = self._selected_key()
532
557
  if self.view != "overview" or key is None or key not in self.data.bundles:
@@ -21,7 +21,7 @@ KEYS: tuple[tuple[str, str], ...] = (
21
21
  ("g", "Observations: verification signals, display-only (no pass/fail score)"),
22
22
  ("e", "Evidence: observed runs vs SELF-REPORTED declarations"),
23
23
  ("j / k, arrows", "Move down / up (scrolls the detail when it has focus)"),
24
- ("Enter", "Open the detail for the selected item"),
24
+ ("Enter", "Open detail; on Active run, attach a suggested session"),
25
25
  ("Esc", "Back: leave detail, close or clear the filter"),
26
26
  ("/", "Filter (timeline: agent: session: kind: risk: source: file: since: until: words)"),
27
27
  ("m", "Timeline: load more events"),