taskops-cli 0.2.0__tar.gz → 0.3.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 (408) hide show
  1. taskops_cli-0.3.0/.gitattributes +22 -0
  2. taskops_cli-0.3.0/.github/workflows/ci.yml +29 -0
  3. taskops_cli-0.3.0/.github/workflows/workflow.yml +54 -0
  4. taskops_cli-0.3.0/.gitignore +23 -0
  5. taskops_cli-0.3.0/ARCHITECTURE.md +1585 -0
  6. taskops_cli-0.3.0/CHANGELOG.md +40 -0
  7. taskops_cli-0.3.0/CLAUDE.md +174 -0
  8. taskops_cli-0.3.0/PKG-INFO +239 -0
  9. taskops_cli-0.3.0/README.md +227 -0
  10. taskops_cli-0.3.0/pyproject.toml +82 -0
  11. taskops_cli-0.3.0/src/taskops/__init__.py +26 -0
  12. taskops_cli-0.3.0/src/taskops/_clock.py +33 -0
  13. taskops_cli-0.3.0/src/taskops/_errors.py +55 -0
  14. taskops_cli-0.3.0/src/taskops/_ids.py +71 -0
  15. taskops_cli-0.3.0/src/taskops/_json.py +48 -0
  16. taskops_cli-0.3.0/src/taskops/_locate.py +106 -0
  17. taskops_cli-0.3.0/src/taskops/_version.py +4 -0
  18. taskops_cli-0.3.0/src/taskops/_wire.py +77 -0
  19. taskops_cli-0.3.0/src/taskops/board.py +196 -0
  20. taskops_cli-0.3.0/src/taskops/cli/__init__.py +7 -0
  21. taskops_cli-0.3.0/src/taskops/cli/__main__.py +7 -0
  22. taskops_cli-0.3.0/src/taskops/cli/admin.py +111 -0
  23. taskops_cli-0.3.0/src/taskops/cli/claude.py +196 -0
  24. taskops_cli-0.3.0/src/taskops/cli/commands.py +173 -0
  25. taskops_cli-0.3.0/src/taskops/cli/enrol.py +45 -0
  26. taskops_cli-0.3.0/src/taskops/cli/main.py +165 -0
  27. taskops_cli-0.3.0/src/taskops/cli/operate.py +178 -0
  28. taskops_cli-0.3.0/src/taskops/cli/push.py +195 -0
  29. taskops_cli-0.3.0/src/taskops/cli/remote.py +141 -0
  30. taskops_cli-0.3.0/src/taskops/cli/serving.py +157 -0
  31. taskops_cli-0.3.0/src/taskops/cli/watch.py +51 -0
  32. taskops_cli-0.3.0/src/taskops/cli/wording.py +93 -0
  33. taskops_cli-0.3.0/src/taskops/core/__init__.py +3 -0
  34. taskops_cli-0.3.0/src/taskops/core/actors.py +77 -0
  35. taskops_cli-0.3.0/src/taskops/core/challenge.py +98 -0
  36. taskops_cli-0.3.0/src/taskops/core/chapters.py +68 -0
  37. taskops_cli-0.3.0/src/taskops/core/event.py +101 -0
  38. taskops_cli-0.3.0/src/taskops/core/graph.py +142 -0
  39. taskops_cli-0.3.0/src/taskops/core/hours.py +123 -0
  40. taskops_cli-0.3.0/src/taskops/core/machine.py +135 -0
  41. taskops_cli-0.3.0/src/taskops/core/mentions.py +88 -0
  42. taskops_cli-0.3.0/src/taskops/core/replay.py +146 -0
  43. taskops_cli-0.3.0/src/taskops/core/review.py +66 -0
  44. taskops_cli-0.3.0/src/taskops/core/scope.py +113 -0
  45. taskops_cli-0.3.0/src/taskops/core/seams.py +127 -0
  46. taskops_cli-0.3.0/src/taskops/core/types.py +196 -0
  47. taskops_cli-0.3.0/src/taskops/gitwork/__init__.py +3 -0
  48. taskops_cli-0.3.0/src/taskops/gitwork/bind.py +150 -0
  49. taskops_cli-0.3.0/src/taskops/gitwork/catchup.py +59 -0
  50. taskops_cli-0.3.0/src/taskops/gitwork/claudefiles.py +97 -0
  51. taskops_cli-0.3.0/src/taskops/gitwork/diff.py +154 -0
  52. taskops_cli-0.3.0/src/taskops/gitwork/install.py +125 -0
  53. taskops_cli-0.3.0/src/taskops/gitwork/landing.py +104 -0
  54. taskops_cli-0.3.0/src/taskops/gitwork/patch.py +64 -0
  55. taskops_cli-0.3.0/src/taskops/gitwork/remote.py +147 -0
  56. taskops_cli-0.3.0/src/taskops/gitwork/run.py +102 -0
  57. taskops_cli-0.3.0/src/taskops/gitwork/sig.py +109 -0
  58. taskops_cli-0.3.0/src/taskops/gitwork/trailer.py +60 -0
  59. taskops_cli-0.3.0/src/taskops/gitwork/trees.py +114 -0
  60. taskops_cli-0.3.0/src/taskops/http/__init__.py +3 -0
  61. taskops_cli-0.3.0/src/taskops/http/admin.py +153 -0
  62. taskops_cli-0.3.0/src/taskops/http/auth.py +85 -0
  63. taskops_cli-0.3.0/src/taskops/http/feed.py +178 -0
  64. taskops_cli-0.3.0/src/taskops/http/gitdoor.py +103 -0
  65. taskops_cli-0.3.0/src/taskops/http/grants.py +69 -0
  66. taskops_cli-0.3.0/src/taskops/http/handler.py +164 -0
  67. taskops_cli-0.3.0/src/taskops/http/ingest.py +181 -0
  68. taskops_cli-0.3.0/src/taskops/http/login.py +155 -0
  69. taskops_cli-0.3.0/src/taskops/http/mounts.py +170 -0
  70. taskops_cli-0.3.0/src/taskops/http/rpc.py +141 -0
  71. taskops_cli-0.3.0/src/taskops/http/scoped.py +40 -0
  72. taskops_cli-0.3.0/src/taskops/http/server.py +53 -0
  73. taskops_cli-0.3.0/src/taskops/http/static.py +96 -0
  74. taskops_cli-0.3.0/src/taskops/http/upstream.py +141 -0
  75. taskops_cli-0.3.0/src/taskops/http/watcher.py +76 -0
  76. taskops_cli-0.3.0/src/taskops/identity.py +112 -0
  77. taskops_cli-0.3.0/src/taskops/mcp/__init__.py +3 -0
  78. {taskops_cli-0.2.0/src/taskops/transports → taskops_cli-0.3.0/src/taskops}/mcp/__main__.py +1 -1
  79. taskops_cli-0.3.0/src/taskops/mcp/before.py +149 -0
  80. taskops_cli-0.3.0/src/taskops/mcp/boards.py +62 -0
  81. taskops_cli-0.3.0/src/taskops/mcp/boardview.py +152 -0
  82. taskops_cli-0.3.0/src/taskops/mcp/brief.py +105 -0
  83. taskops_cli-0.3.0/src/taskops/mcp/dossier.py +162 -0
  84. taskops_cli-0.3.0/src/taskops/mcp/fields.py +79 -0
  85. taskops_cli-0.3.0/src/taskops/mcp/gitmoves.py +191 -0
  86. taskops_cli-0.3.0/src/taskops/mcp/hello.py +76 -0
  87. taskops_cli-0.3.0/src/taskops/mcp/integrate.py +161 -0
  88. taskops_cli-0.3.0/src/taskops/mcp/render.py +88 -0
  89. taskops_cli-0.3.0/src/taskops/mcp/schema.py +166 -0
  90. taskops_cli-0.3.0/src/taskops/mcp/server.py +143 -0
  91. taskops_cli-0.3.0/src/taskops/mcp/thread.py +40 -0
  92. taskops_cli-0.3.0/src/taskops/mcp/tools.py +167 -0
  93. taskops_cli-0.3.0/src/taskops/session.py +109 -0
  94. taskops_cli-0.3.0/src/taskops/store/__init__.py +3 -0
  95. taskops_cli-0.3.0/src/taskops/store/cache.py +164 -0
  96. taskops_cli-0.3.0/src/taskops/store/creds.py +165 -0
  97. taskops_cli-0.3.0/src/taskops/store/live.py +193 -0
  98. taskops_cli-0.3.0/src/taskops/store/log.py +77 -0
  99. taskops_cli-0.3.0/src/taskops/store/pubkeys.py +61 -0
  100. taskops_cli-0.3.0/src/taskops/store/reviews.py +94 -0
  101. taskops_cli-0.3.0/src/taskops/store/server.py +185 -0
  102. taskops_cli-0.3.0/src/taskops/store/stores.py +110 -0
  103. taskops_cli-0.3.0/src/taskops/ui/app.js +60 -0
  104. taskops_cli-0.3.0/src/taskops/ui/index.html +20 -0
  105. taskops_cli-0.3.0/src/taskops/ui/style.css +1 -0
  106. taskops_cli-0.3.0/src/taskops/verbs/__init__.py +154 -0
  107. taskops_cli-0.3.0/src/taskops/verbs/_args.py +97 -0
  108. taskops_cli-0.3.0/src/taskops/verbs/_cards.py +59 -0
  109. taskops_cli-0.3.0/src/taskops/verbs/_context.py +189 -0
  110. taskops_cli-0.3.0/src/taskops/verbs/_facts.py +163 -0
  111. taskops_cli-0.3.0/src/taskops/verbs/_mentions.py +80 -0
  112. taskops_cli-0.3.0/src/taskops/verbs/_rows.py +46 -0
  113. taskops_cli-0.3.0/src/taskops/verbs/_waiting.py +57 -0
  114. taskops_cli-0.3.0/src/taskops/verbs/assign.py +115 -0
  115. taskops_cli-0.3.0/src/taskops/verbs/card.py +54 -0
  116. taskops_cli-0.3.0/src/taskops/verbs/events.py +60 -0
  117. taskops_cli-0.3.0/src/taskops/verbs/plan.py +154 -0
  118. taskops_cli-0.3.0/src/taskops/verbs/project.py +109 -0
  119. taskops_cli-0.3.0/src/taskops/verbs/pulse.py +165 -0
  120. taskops_cli-0.3.0/src/taskops/verbs/record.py +99 -0
  121. taskops_cli-0.3.0/src/taskops/verbs/report.py +120 -0
  122. taskops_cli-0.3.0/src/taskops/verbs/review.py +88 -0
  123. taskops_cli-0.3.0/src/taskops/verbs/take.py +106 -0
  124. taskops_cli-0.3.0/src/taskops/verbs/update.py +193 -0
  125. taskops_cli-0.3.0/tests/__init__.py +3 -0
  126. taskops_cli-0.3.0/tests/conftest.py +70 -0
  127. taskops_cli-0.3.0/tests/test_architecture.py +212 -0
  128. taskops_cli-0.3.0/tests/test_claude.py +285 -0
  129. taskops_cli-0.3.0/tests/test_core.py +648 -0
  130. taskops_cli-0.3.0/tests/test_git.py +745 -0
  131. taskops_cli-0.3.0/tests/test_mcp.py +1375 -0
  132. taskops_cli-0.3.0/tests/test_report.py +115 -0
  133. taskops_cli-0.3.0/tests/test_store.py +149 -0
  134. taskops_cli-0.3.0/tests/test_topology.py +3006 -0
  135. taskops_cli-0.3.0/tests/test_ui.py +857 -0
  136. taskops_cli-0.3.0/tests/test_verbs.py +1223 -0
  137. taskops_cli-0.3.0/tests/ui_harness.js +116 -0
  138. taskops_cli-0.3.0/ui/build.mjs +40 -0
  139. taskops_cli-0.3.0/ui/index.html +20 -0
  140. taskops_cli-0.3.0/ui/package-lock.json +589 -0
  141. taskops_cli-0.3.0/ui/package.json +23 -0
  142. taskops_cli-0.3.0/ui/smoke/fixture.json +1095 -0
  143. taskops_cli-0.3.0/ui/smoke/main.tsx +73 -0
  144. taskops_cli-0.3.0/ui/smoke/run.mjs +95 -0
  145. taskops_cli-0.3.0/ui/smoke/sections/actors.tsx +548 -0
  146. taskops_cli-0.3.0/ui/smoke/sections/board-columns.tsx +106 -0
  147. taskops_cli-0.3.0/ui/smoke/sections/chapter-landed.tsx +71 -0
  148. taskops_cli-0.3.0/ui/smoke/sections/chapters-open.tsx +166 -0
  149. taskops_cli-0.3.0/ui/smoke/sections/comment-box.tsx +125 -0
  150. taskops_cli-0.3.0/ui/smoke/sections/diff-page.tsx +272 -0
  151. taskops_cli-0.3.0/ui/smoke/sections/dossier.tsx +121 -0
  152. taskops_cli-0.3.0/ui/smoke/sections/event-stream.tsx +57 -0
  153. taskops_cli-0.3.0/ui/smoke/sections/forge-links.tsx +145 -0
  154. taskops_cli-0.3.0/ui/smoke/sections/git-diff.tsx +200 -0
  155. taskops_cli-0.3.0/ui/smoke/sections/monitor-panes.tsx +88 -0
  156. taskops_cli-0.3.0/ui/smoke/sections/overlay-escape.tsx +17 -0
  157. taskops_cli-0.3.0/ui/smoke/sections/reviewing-skew.tsx +69 -0
  158. taskops_cli-0.3.0/ui/smoke/sections/section.ts +78 -0
  159. taskops_cli-0.3.0/ui/smoke/sections/swarm-topology.tsx +222 -0
  160. taskops_cli-0.3.0/ui/smoke/sections/thread-closing-note.tsx +139 -0
  161. taskops_cli-0.3.0/ui/smoke/sections/worktrees-index.tsx +332 -0
  162. taskops_cli-0.3.0/ui/smoke/sections.mjs +83 -0
  163. taskops_cli-0.3.0/ui/src/App.tsx +262 -0
  164. taskops_cli-0.3.0/ui/src/client.ts +237 -0
  165. taskops_cli-0.3.0/ui/src/components/actors/Daysheet.tsx +436 -0
  166. taskops_cli-0.3.0/ui/src/components/actors/DevPanel.tsx +193 -0
  167. taskops_cli-0.3.0/ui/src/components/board/CardTile.tsx +304 -0
  168. taskops_cli-0.3.0/ui/src/components/board/Column.tsx +92 -0
  169. taskops_cli-0.3.0/ui/src/components/card/CommentBox.tsx +244 -0
  170. taskops_cli-0.3.0/ui/src/components/card/Drawer.tsx +161 -0
  171. taskops_cli-0.3.0/ui/src/components/card/Patch.tsx +554 -0
  172. taskops_cli-0.3.0/ui/src/components/card/Sections.tsx +301 -0
  173. taskops_cli-0.3.0/ui/src/components/card/Thread.tsx +252 -0
  174. taskops_cli-0.3.0/ui/src/components/card/split.ts +164 -0
  175. taskops_cli-0.3.0/ui/src/components/card/tokens.ts +45 -0
  176. taskops_cli-0.3.0/ui/src/components/chrome/AvatarStack.tsx +128 -0
  177. taskops_cli-0.3.0/ui/src/components/chrome/Header.tsx +157 -0
  178. taskops_cli-0.3.0/ui/src/components/chrome/KpiRail.tsx +86 -0
  179. taskops_cli-0.3.0/ui/src/components/chrome/MilestonePicker.tsx +305 -0
  180. taskops_cli-0.3.0/ui/src/components/chrome/TabNav.tsx +111 -0
  181. taskops_cli-0.3.0/ui/src/components/monitor/Chapter.tsx +427 -0
  182. taskops_cli-0.3.0/ui/src/components/monitor/DependencyChain.tsx +255 -0
  183. taskops_cli-0.3.0/ui/src/components/monitor/EditSurface.tsx +169 -0
  184. taskops_cli-0.3.0/ui/src/components/monitor/EventStream.tsx +311 -0
  185. taskops_cli-0.3.0/ui/src/components/monitor/LeaseHealth.tsx +228 -0
  186. taskops_cli-0.3.0/ui/src/components/monitor/LiveLeases.tsx +418 -0
  187. taskops_cli-0.3.0/ui/src/components/monitor/Mentions.tsx +123 -0
  188. taskops_cli-0.3.0/ui/src/components/monitor/Pane.tsx +252 -0
  189. taskops_cli-0.3.0/ui/src/components/monitor/Swarm.tsx +472 -0
  190. taskops_cli-0.3.0/ui/src/components/monitor/Throughput.tsx +275 -0
  191. taskops_cli-0.3.0/ui/src/components/monitor/panels.ts +780 -0
  192. taskops_cli-0.3.0/ui/src/components/shared/Markdown.tsx +242 -0
  193. taskops_cli-0.3.0/ui/src/components/shared/Overlay.tsx +128 -0
  194. taskops_cli-0.3.0/ui/src/components/shared/overlayStack.ts +46 -0
  195. taskops_cli-0.3.0/ui/src/format.ts +97 -0
  196. taskops_cli-0.3.0/ui/src/links.tsx +439 -0
  197. taskops_cli-0.3.0/ui/src/main.tsx +28 -0
  198. taskops_cli-0.3.0/ui/src/markdown.ts +185 -0
  199. taskops_cli-0.3.0/ui/src/pages/Actors.tsx +495 -0
  200. taskops_cli-0.3.0/ui/src/pages/Board.tsx +218 -0
  201. taskops_cli-0.3.0/ui/src/pages/Monitor.tsx +202 -0
  202. taskops_cli-0.3.0/ui/src/pages/WorktreeDiff.tsx +320 -0
  203. taskops_cli-0.3.0/ui/src/pages/Worktrees.tsx +646 -0
  204. taskops_cli-0.3.0/ui/src/theme/theme.ts +28 -0
  205. taskops_cli-0.3.0/ui/src/theme/tokens.css +169 -0
  206. taskops_cli-0.3.0/ui/src/types.ts +600 -0
  207. taskops_cli-0.3.0/ui/src/useBoard.ts +195 -0
  208. taskops_cli-0.3.0/ui/src/useEvents.ts +125 -0
  209. taskops_cli-0.3.0/ui/styles/index.css +13 -0
  210. taskops_cli-0.3.0/ui/tsconfig.json +20 -0
  211. taskops_cli-0.3.0/uv.lock +140 -0
  212. taskops_cli-0.2.0/LICENSE +0 -21
  213. taskops_cli-0.2.0/PKG-INFO +0 -291
  214. taskops_cli-0.2.0/README.md +0 -265
  215. taskops_cli-0.2.0/pyproject.toml +0 -129
  216. taskops_cli-0.2.0/setup.cfg +0 -4
  217. taskops_cli-0.2.0/src/taskops/__init__.py +0 -39
  218. taskops_cli-0.2.0/src/taskops/_clock.py +0 -32
  219. taskops_cli-0.2.0/src/taskops/_errors.py +0 -160
  220. taskops_cli-0.2.0/src/taskops/_ids.py +0 -63
  221. taskops_cli-0.2.0/src/taskops/_types.py +0 -106
  222. taskops_cli-0.2.0/src/taskops/_version.py +0 -7
  223. taskops_cli-0.2.0/src/taskops/assets/GUIDE.md +0 -220
  224. taskops_cli-0.2.0/src/taskops/contracts/__init__.py +0 -96
  225. taskops_cli-0.2.0/src/taskops/contracts/_fields.py +0 -113
  226. taskops_cli-0.2.0/src/taskops/contracts/actor.py +0 -30
  227. taskops_cli-0.2.0/src/taskops/contracts/board.py +0 -142
  228. taskops_cli-0.2.0/src/taskops/contracts/commit.py +0 -36
  229. taskops_cli-0.2.0/src/taskops/contracts/day.py +0 -150
  230. taskops_cli-0.2.0/src/taskops/contracts/dep.py +0 -23
  231. taskops_cli-0.2.0/src/taskops/contracts/event.py +0 -58
  232. taskops_cli-0.2.0/src/taskops/contracts/gitstate.py +0 -45
  233. taskops_cli-0.2.0/src/taskops/contracts/index.py +0 -37
  234. taskops_cli-0.2.0/src/taskops/contracts/lease.py +0 -43
  235. taskops_cli-0.2.0/src/taskops/contracts/log.py +0 -59
  236. taskops_cli-0.2.0/src/taskops/contracts/remote.py +0 -48
  237. taskops_cli-0.2.0/src/taskops/contracts/results.py +0 -84
  238. taskops_cli-0.2.0/src/taskops/contracts/task.py +0 -94
  239. taskops_cli-0.2.0/src/taskops/contracts/tools.py +0 -110
  240. taskops_cli-0.2.0/src/taskops/contracts/wire.py +0 -60
  241. taskops_cli-0.2.0/src/taskops/engine/__init__.py +0 -34
  242. taskops_cli-0.2.0/src/taskops/engine/_blocks.py +0 -48
  243. taskops_cli-0.2.0/src/taskops/engine/_briefs.py +0 -92
  244. taskops_cli-0.2.0/src/taskops/engine/_chunks.py +0 -66
  245. taskops_cli-0.2.0/src/taskops/engine/_closed.py +0 -65
  246. taskops_cli-0.2.0/src/taskops/engine/_entries.py +0 -126
  247. taskops_cli-0.2.0/src/taskops/engine/_events.py +0 -55
  248. taskops_cli-0.2.0/src/taskops/engine/_opened.py +0 -51
  249. taskops_cli-0.2.0/src/taskops/engine/_process.py +0 -80
  250. taskops_cli-0.2.0/src/taskops/engine/_prompts.py +0 -98
  251. taskops_cli-0.2.0/src/taskops/engine/_stream.py +0 -129
  252. taskops_cli-0.2.0/src/taskops/engine/activity.py +0 -94
  253. taskops_cli-0.2.0/src/taskops/engine/bus.py +0 -42
  254. taskops_cli-0.2.0/src/taskops/engine/commitline.py +0 -110
  255. taskops_cli-0.2.0/src/taskops/engine/day.py +0 -142
  256. taskops_cli-0.2.0/src/taskops/engine/diffstat.py +0 -63
  257. taskops_cli-0.2.0/src/taskops/engine/gitio.py +0 -108
  258. taskops_cli-0.2.0/src/taskops/engine/gitstate.py +0 -96
  259. taskops_cli-0.2.0/src/taskops/engine/history.py +0 -76
  260. taskops_cli-0.2.0/src/taskops/engine/identity.py +0 -84
  261. taskops_cli-0.2.0/src/taskops/engine/log.py +0 -68
  262. taskops_cli-0.2.0/src/taskops/engine/machine.py +0 -160
  263. taskops_cli-0.2.0/src/taskops/engine/narrate.py +0 -91
  264. taskops_cli-0.2.0/src/taskops/engine/project.py +0 -57
  265. taskops_cli-0.2.0/src/taskops/engine/replay.py +0 -142
  266. taskops_cli-0.2.0/src/taskops/engine/reports.py +0 -67
  267. taskops_cli-0.2.0/src/taskops/engine/scheduler.py +0 -135
  268. taskops_cli-0.2.0/src/taskops/engine/transcript.py +0 -127
  269. taskops_cli-0.2.0/src/taskops/engine/wire.py +0 -92
  270. taskops_cli-0.2.0/src/taskops/engine/worker.py +0 -115
  271. taskops_cli-0.2.0/src/taskops/render/__init__.py +0 -40
  272. taskops_cli-0.2.0/src/taskops/render/_closed_days.py +0 -64
  273. taskops_cli-0.2.0/src/taskops/render/_dossier.py +0 -68
  274. taskops_cli-0.2.0/src/taskops/render/_opened.py +0 -64
  275. taskops_cli-0.2.0/src/taskops/render/_sections.py +0 -51
  276. taskops_cli-0.2.0/src/taskops/render/_tasklist.py +0 -72
  277. taskops_cli-0.2.0/src/taskops/render/_text.py +0 -74
  278. taskops_cli-0.2.0/src/taskops/render/_verbatim.py +0 -65
  279. taskops_cli-0.2.0/src/taskops/render/ansi.py +0 -92
  280. taskops_cli-0.2.0/src/taskops/render/board.py +0 -55
  281. taskops_cli-0.2.0/src/taskops/render/day.py +0 -102
  282. taskops_cli-0.2.0/src/taskops/render/dispatch.py +0 -104
  283. taskops_cli-0.2.0/src/taskops/render/inbox.py +0 -27
  284. taskops_cli-0.2.0/src/taskops/render/log.py +0 -47
  285. taskops_cli-0.2.0/src/taskops/render/recover.py +0 -64
  286. taskops_cli-0.2.0/src/taskops/render/report.py +0 -51
  287. taskops_cli-0.2.0/src/taskops/render/reports.py +0 -57
  288. taskops_cli-0.2.0/src/taskops/render/results.py +0 -96
  289. taskops_cli-0.2.0/src/taskops/render/session.py +0 -75
  290. taskops_cli-0.2.0/src/taskops/render/task.py +0 -88
  291. taskops_cli-0.2.0/src/taskops/render/tasklist.py +0 -65
  292. taskops_cli-0.2.0/src/taskops/storage/__init__.py +0 -36
  293. taskops_cli-0.2.0/src/taskops/storage/_ddl.py +0 -78
  294. taskops_cli-0.2.0/src/taskops/storage/_delivered.py +0 -51
  295. taskops_cli-0.2.0/src/taskops/storage/_deps.py +0 -69
  296. taskops_cli-0.2.0/src/taskops/storage/_events.py +0 -127
  297. taskops_cli-0.2.0/src/taskops/storage/_leases.py +0 -108
  298. taskops_cli-0.2.0/src/taskops/storage/_rows.py +0 -90
  299. taskops_cli-0.2.0/src/taskops/storage/_tasks.py +0 -124
  300. taskops_cli-0.2.0/src/taskops/storage/locate.py +0 -76
  301. taskops_cli-0.2.0/src/taskops/storage/schema.py +0 -66
  302. taskops_cli-0.2.0/src/taskops/storage/store.py +0 -120
  303. taskops_cli-0.2.0/src/taskops/storage/sync.py +0 -139
  304. taskops_cli-0.2.0/src/taskops/transports/__init__.py +0 -6
  305. taskops_cli-0.2.0/src/taskops/transports/cli/__init__.py +0 -0
  306. taskops_cli-0.2.0/src/taskops/transports/cli/commands/__init__.py +0 -3
  307. taskops_cli-0.2.0/src/taskops/transports/cli/commands/_digest.py +0 -64
  308. taskops_cli-0.2.0/src/taskops/transports/cli/commands/_serve_init.py +0 -65
  309. taskops_cli-0.2.0/src/taskops/transports/cli/commands/_shared.py +0 -50
  310. taskops_cli-0.2.0/src/taskops/transports/cli/commands/_tasks_args.py +0 -112
  311. taskops_cli-0.2.0/src/taskops/transports/cli/commands/_window.py +0 -45
  312. taskops_cli-0.2.0/src/taskops/transports/cli/commands/ask.py +0 -27
  313. taskops_cli-0.2.0/src/taskops/transports/cli/commands/dispatch.py +0 -43
  314. taskops_cli-0.2.0/src/taskops/transports/cli/commands/init.py +0 -48
  315. taskops_cli-0.2.0/src/taskops/transports/cli/commands/log.py +0 -22
  316. taskops_cli-0.2.0/src/taskops/transports/cli/commands/plan.py +0 -43
  317. taskops_cli-0.2.0/src/taskops/transports/cli/commands/pushpull.py +0 -53
  318. taskops_cli-0.2.0/src/taskops/transports/cli/commands/recover.py +0 -30
  319. taskops_cli-0.2.0/src/taskops/transports/cli/commands/remote.py +0 -56
  320. taskops_cli-0.2.0/src/taskops/transports/cli/commands/report.py +0 -82
  321. taskops_cli-0.2.0/src/taskops/transports/cli/commands/run_.py +0 -60
  322. taskops_cli-0.2.0/src/taskops/transports/cli/commands/serve.py +0 -74
  323. taskops_cli-0.2.0/src/taskops/transports/cli/commands/sync.py +0 -22
  324. taskops_cli-0.2.0/src/taskops/transports/cli/commands/tasks.py +0 -79
  325. taskops_cli-0.2.0/src/taskops/transports/cli/commands/ui.py +0 -72
  326. taskops_cli-0.2.0/src/taskops/transports/cli/commands/update.py +0 -25
  327. taskops_cli-0.2.0/src/taskops/transports/cli/main.py +0 -85
  328. taskops_cli-0.2.0/src/taskops/transports/hooks/__init__.py +0 -15
  329. taskops_cli-0.2.0/src/taskops/transports/hooks/__main__.py +0 -63
  330. taskops_cli-0.2.0/src/taskops/transports/hooks/_args.py +0 -28
  331. taskops_cli-0.2.0/src/taskops/transports/hooks/claude.py +0 -78
  332. taskops_cli-0.2.0/src/taskops/transports/hooks/commit.py +0 -61
  333. taskops_cli-0.2.0/src/taskops/transports/hooks/events.py +0 -107
  334. taskops_cli-0.2.0/src/taskops/transports/hooks/record.py +0 -55
  335. taskops_cli-0.2.0/src/taskops/transports/http/__init__.py +0 -21
  336. taskops_cli-0.2.0/src/taskops/transports/http/_handler.py +0 -132
  337. taskops_cli-0.2.0/src/taskops/transports/http/_wire.py +0 -79
  338. taskops_cli-0.2.0/src/taskops/transports/http/_wsframes.py +0 -116
  339. taskops_cli-0.2.0/src/taskops/transports/http/agentapi.py +0 -69
  340. taskops_cli-0.2.0/src/taskops/transports/http/api.py +0 -122
  341. taskops_cli-0.2.0/src/taskops/transports/http/exchange.py +0 -80
  342. taskops_cli-0.2.0/src/taskops/transports/http/live.py +0 -160
  343. taskops_cli-0.2.0/src/taskops/transports/http/policy.py +0 -110
  344. taskops_cli-0.2.0/src/taskops/transports/http/projects.py +0 -116
  345. taskops_cli-0.2.0/src/taskops/transports/http/reports.py +0 -75
  346. taskops_cli-0.2.0/src/taskops/transports/http/router.py +0 -90
  347. taskops_cli-0.2.0/src/taskops/transports/http/server.py +0 -50
  348. taskops_cli-0.2.0/src/taskops/transports/http/static.py +0 -86
  349. taskops_cli-0.2.0/src/taskops/transports/http/ui/app.js +0 -59
  350. taskops_cli-0.2.0/src/taskops/transports/http/ui/index.html +0 -23
  351. taskops_cli-0.2.0/src/taskops/transports/http/ui/style.css +0 -1
  352. taskops_cli-0.2.0/src/taskops/transports/http/websocket.py +0 -60
  353. taskops_cli-0.2.0/src/taskops/transports/mcp/__init__.py +0 -19
  354. taskops_cli-0.2.0/src/taskops/transports/mcp/_descriptions.py +0 -102
  355. taskops_cli-0.2.0/src/taskops/transports/mcp/_reads.py +0 -82
  356. taskops_cli-0.2.0/src/taskops/transports/mcp/_writes.py +0 -72
  357. taskops_cli-0.2.0/src/taskops/transports/mcp/answers.py +0 -44
  358. taskops_cli-0.2.0/src/taskops/transports/mcp/arguments.py +0 -104
  359. taskops_cli-0.2.0/src/taskops/transports/mcp/dispatch.py +0 -47
  360. taskops_cli-0.2.0/src/taskops/transports/mcp/protocol.py +0 -83
  361. taskops_cli-0.2.0/src/taskops/transports/mcp/schema.py +0 -50
  362. taskops_cli-0.2.0/src/taskops/transports/mcp/server.py +0 -49
  363. taskops_cli-0.2.0/src/taskops/transports/mcp/tools.py +0 -66
  364. taskops_cli-0.2.0/src/taskops/usecases/__init__.py +0 -56
  365. taskops_cli-0.2.0/src/taskops/usecases/_entry.py +0 -84
  366. taskops_cli-0.2.0/src/taskops/usecases/_facts.py +0 -49
  367. taskops_cli-0.2.0/src/taskops/usecases/_freeing.py +0 -93
  368. taskops_cli-0.2.0/src/taskops/usecases/_gitignore.py +0 -94
  369. taskops_cli-0.2.0/src/taskops/usecases/_mirroring.py +0 -57
  370. taskops_cli-0.2.0/src/taskops/usecases/_narrating.py +0 -77
  371. taskops_cli-0.2.0/src/taskops/usecases/_project.py +0 -67
  372. taskops_cli-0.2.0/src/taskops/usecases/_range.py +0 -102
  373. taskops_cli-0.2.0/src/taskops/usecases/_reasons.py +0 -54
  374. taskops_cli-0.2.0/src/taskops/usecases/_remotefile.py +0 -62
  375. taskops_cli-0.2.0/src/taskops/usecases/_reportsync.py +0 -108
  376. taskops_cli-0.2.0/src/taskops/usecases/_routing.py +0 -91
  377. taskops_cli-0.2.0/src/taskops/usecases/_wireclient.py +0 -141
  378. taskops_cli-0.2.0/src/taskops/usecases/ask.py +0 -41
  379. taskops_cli-0.2.0/src/taskops/usecases/claim.py +0 -104
  380. taskops_cli-0.2.0/src/taskops/usecases/dispatch.py +0 -160
  381. taskops_cli-0.2.0/src/taskops/usecases/dossier.py +0 -155
  382. taskops_cli-0.2.0/src/taskops/usecases/edit.py +0 -71
  383. taskops_cli-0.2.0/src/taskops/usecases/exchange.py +0 -86
  384. taskops_cli-0.2.0/src/taskops/usecases/feed.py +0 -138
  385. taskops_cli-0.2.0/src/taskops/usecases/guard.py +0 -122
  386. taskops_cli-0.2.0/src/taskops/usecases/hooks.py +0 -127
  387. taskops_cli-0.2.0/src/taskops/usecases/index.py +0 -62
  388. taskops_cli-0.2.0/src/taskops/usecases/ingest.py +0 -60
  389. taskops_cli-0.2.0/src/taskops/usecases/log.py +0 -134
  390. taskops_cli-0.2.0/src/taskops/usecases/narration.py +0 -91
  391. taskops_cli-0.2.0/src/taskops/usecases/plan.py +0 -128
  392. taskops_cli-0.2.0/src/taskops/usecases/pushpull.py +0 -119
  393. taskops_cli-0.2.0/src/taskops/usecases/recover.py +0 -84
  394. taskops_cli-0.2.0/src/taskops/usecases/remote.py +0 -78
  395. taskops_cli-0.2.0/src/taskops/usecases/report.py +0 -87
  396. taskops_cli-0.2.0/src/taskops/usecases/reportfile.py +0 -106
  397. taskops_cli-0.2.0/src/taskops/usecases/session.py +0 -134
  398. taskops_cli-0.2.0/src/taskops/usecases/setup.py +0 -92
  399. taskops_cli-0.2.0/src/taskops/usecases/sync.py +0 -78
  400. taskops_cli-0.2.0/src/taskops/usecases/update.py +0 -123
  401. taskops_cli-0.2.0/src/taskops/usecases/view.py +0 -112
  402. taskops_cli-0.2.0/src/taskops_cli.egg-info/PKG-INFO +0 -291
  403. taskops_cli-0.2.0/src/taskops_cli.egg-info/SOURCES.txt +0 -196
  404. taskops_cli-0.2.0/src/taskops_cli.egg-info/dependency_links.txt +0 -1
  405. taskops_cli-0.2.0/src/taskops_cli.egg-info/entry_points.txt +0 -2
  406. taskops_cli-0.2.0/src/taskops_cli.egg-info/requires.txt +0 -3
  407. taskops_cli-0.2.0/src/taskops_cli.egg-info/top_level.txt +0 -1
  408. {taskops_cli-0.2.0 → taskops_cli-0.3.0}/src/taskops/py.typed +0 -0
@@ -0,0 +1,22 @@
1
+ # The built dashboard is a GENERATED artifact that is committed on purpose —
2
+ # that is what makes `pip install taskops` serve a dashboard with no node
3
+ # toolchain (CLAUDE.md, "The dashboard is built, not hand-written"). Its source
4
+ # is `ui/`; `node build.mjs` from there writes these three files.
5
+ #
6
+ # `-merge` uses git's BUILT-IN refusal to text-merge a file: no `git config`,
7
+ # no custom driver, nothing a fresh clone has to install. On a merge git leaves
8
+ # our copy whole (never a conflict marker inside minified JavaScript) and marks
9
+ # the path conflicted. The resolution is not a hunk, it is a rebuild:
10
+ #
11
+ # cd ui && node build.mjs && git add ../src/taskops/ui && git commit --no-edit
12
+ #
13
+ # Measured, 2026-08-08: without this, two branches that changed DIFFERENT
14
+ # regions of the bundle auto-merge SILENTLY into a file no build ever produced
15
+ # — a bundle that is neither side's. That is the failure this line exists to
16
+ # make loud. See docs/fan-out.md §11.
17
+ #
18
+ # `-diff` keeps a 190kb single-purpose artifact out of every diff and every
19
+ # `git log -p`; the rebuild is the change, the bytes are not reviewable.
20
+ src/taskops/ui/app.js -diff -merge linguist-generated=true
21
+ src/taskops/ui/style.css -diff -merge linguist-generated=true
22
+ src/taskops/ui/index.html -diff -merge linguist-generated=true
@@ -0,0 +1,29 @@
1
+ name: ci
2
+
3
+ on:
4
+ push:
5
+ branches: [main, master]
6
+ pull_request:
7
+ workflow_call: # release.yml runs these same gates on the tag — no second copy
8
+
9
+ jobs:
10
+ gates:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ python: ["3.11", "3.13"]
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: astral-sh/setup-uv@v5
18
+ with:
19
+ python-version: ${{ matrix.python }}
20
+ - uses: actions/setup-node@v4
21
+ with:
22
+ node-version: "22"
23
+ cache: npm
24
+ cache-dependency-path: ui/package-lock.json
25
+ - run: npm ci
26
+ working-directory: ui
27
+ - run: uv run ruff check src tests
28
+ - run: uv run pyright
29
+ - run: uv run pytest
@@ -0,0 +1,54 @@
1
+ name: release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+ workflow_dispatch: # rehearse without burning a version: publish stays skipped
7
+
8
+ jobs:
9
+ guard:
10
+ # PyPI versions are permanent — an artifact whose name lies cannot be undone.
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ - name: the tag must be the version the source declares
15
+ if: github.ref_type == 'tag'
16
+ run: |
17
+ declared=$(grep -o '__version__ = "[^"]*"' src/taskops/_version.py | cut -d'"' -f2)
18
+ test "${GITHUB_REF_NAME#v}" = "$declared" || {
19
+ echo "tag $GITHUB_REF_NAME != declared $declared"; exit 1; }
20
+
21
+ gates:
22
+ # A tag push does not match ci.yml's `push: branches` — without this call
23
+ # the release path would have no gate at all.
24
+ uses: ./.github/workflows/ci.yml
25
+
26
+ build:
27
+ runs-on: ubuntu-latest
28
+ needs: [guard]
29
+ steps:
30
+ - uses: actions/checkout@v4
31
+ - uses: astral-sh/setup-uv@v5
32
+ - run: uv build
33
+ - uses: actions/upload-artifact@v4
34
+ with:
35
+ name: dist
36
+ path: dist/
37
+
38
+ publish:
39
+ # Trusted Publishing (OIDC, no token) — must live top-level, never in a
40
+ # reusable workflow. Publisher registered on pypi.org for `taskops-cli`.
41
+ if: github.ref_type == 'tag'
42
+ runs-on: ubuntu-latest
43
+ needs: [guard, gates, build]
44
+ environment: pypi
45
+ permissions:
46
+ id-token: write
47
+ steps:
48
+ - uses: actions/download-artifact@v4
49
+ with:
50
+ name: dist
51
+ path: dist/
52
+ - uses: pypa/gh-action-pypi-publish@release/v1
53
+ with:
54
+ skip-existing: true
@@ -0,0 +1,23 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .venv/
4
+ dist/
5
+ *.egg-info/
6
+ .pytest_cache/
7
+ .ruff_cache/
8
+
9
+ # ui dev project
10
+ ui/node_modules/
11
+ # the smoke section index is DISCOVERED, never committed (ui/smoke/sections.mjs):
12
+ # a hand-edited list is the appendix that made every parallel UI card conflict.
13
+ ui/smoke/sections/index.generated.ts
14
+
15
+ # taskops
16
+ .taskops/remote.json
17
+ .taskops/pending.jsonl
18
+ .taskops/trees/
19
+ .taskops/hook-seen.json
20
+ .taskops/ui.json
21
+
22
+ .taskops/live.sqlite*
23
+ .taskops/board.local-*/