the-mill 0.2.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 (145) hide show
  1. the_mill-0.2.0/LICENSE +21 -0
  2. the_mill-0.2.0/PKG-INFO +143 -0
  3. the_mill-0.2.0/README.md +106 -0
  4. the_mill-0.2.0/agent_coord/__init__.py +40 -0
  5. the_mill-0.2.0/agent_coord/__main__.py +1504 -0
  6. the_mill-0.2.0/agent_coord/admin.py +76 -0
  7. the_mill-0.2.0/agent_coord/align/__init__.py +17 -0
  8. the_mill-0.2.0/agent_coord/align/collect.py +13 -0
  9. the_mill-0.2.0/agent_coord/align/phrase.py +18 -0
  10. the_mill-0.2.0/agent_coord/align/words.py +6 -0
  11. the_mill-0.2.0/agent_coord/briefings/BOOTSTRAP.md +178 -0
  12. the_mill-0.2.0/agent_coord/briefings/HUMAN.md +62 -0
  13. the_mill-0.2.0/agent_coord/briefings/JOIN.md +87 -0
  14. the_mill-0.2.0/agent_coord/briefings/USECASES.md +175 -0
  15. the_mill-0.2.0/agent_coord/catalog.py +155 -0
  16. the_mill-0.2.0/agent_coord/config.py +142 -0
  17. the_mill-0.2.0/agent_coord/coord.py +5250 -0
  18. the_mill-0.2.0/agent_coord/dashboard.py +9 -0
  19. the_mill-0.2.0/agent_coord/door.py +1434 -0
  20. the_mill-0.2.0/agent_coord/files.py +154 -0
  21. the_mill-0.2.0/agent_coord/howto.py +201 -0
  22. the_mill-0.2.0/agent_coord/install.py +3315 -0
  23. the_mill-0.2.0/agent_coord/jobs/__init__.py +38 -0
  24. the_mill-0.2.0/agent_coord/jobs/caps.py +41 -0
  25. the_mill-0.2.0/agent_coord/jobs/constants.py +45 -0
  26. the_mill-0.2.0/agent_coord/jobs/needs.py +8 -0
  27. the_mill-0.2.0/agent_coord/jobs/observer.py +8 -0
  28. the_mill-0.2.0/agent_coord/jobs/progress.py +56 -0
  29. the_mill-0.2.0/agent_coord/kpi/__init__.py +22 -0
  30. the_mill-0.2.0/agent_coord/kpi/estimate.py +20 -0
  31. the_mill-0.2.0/agent_coord/kpi/last_gate.py +9 -0
  32. the_mill-0.2.0/agent_coord/kpi/rates.py +17 -0
  33. the_mill-0.2.0/agent_coord/kpi/where.py +51 -0
  34. the_mill-0.2.0/agent_coord/kpi/window.py +18 -0
  35. the_mill-0.2.0/agent_coord/leases/__init__.py +27 -0
  36. the_mill-0.2.0/agent_coord/leases/clock.py +13 -0
  37. the_mill-0.2.0/agent_coord/leases/errors.py +43 -0
  38. the_mill-0.2.0/agent_coord/leases/holders.py +40 -0
  39. the_mill-0.2.0/agent_coord/leases/keys.py +33 -0
  40. the_mill-0.2.0/agent_coord/mail/__init__.py +35 -0
  41. the_mill-0.2.0/agent_coord/mail/addressing.py +83 -0
  42. the_mill-0.2.0/agent_coord/mail/constants.py +10 -0
  43. the_mill-0.2.0/agent_coord/mail/filters.py +48 -0
  44. the_mill-0.2.0/agent_coord/mail/read_party.py +23 -0
  45. the_mill-0.2.0/agent_coord/middleware.py +878 -0
  46. the_mill-0.2.0/agent_coord/migrate.py +266 -0
  47. the_mill-0.2.0/agent_coord/netbind.py +207 -0
  48. the_mill-0.2.0/agent_coord/observe.py +478 -0
  49. the_mill-0.2.0/agent_coord/office.py +211 -0
  50. the_mill-0.2.0/agent_coord/presence/__init__.py +56 -0
  51. the_mill-0.2.0/agent_coord/presence/beat.py +7 -0
  52. the_mill-0.2.0/agent_coord/presence/drain.py +249 -0
  53. the_mill-0.2.0/agent_coord/presence/humans.py +23 -0
  54. the_mill-0.2.0/agent_coord/presence/roles.py +9 -0
  55. the_mill-0.2.0/agent_coord/presence/tokens.py +9 -0
  56. the_mill-0.2.0/agent_coord/presence/vendor.py +9 -0
  57. the_mill-0.2.0/agent_coord/proc.py +196 -0
  58. the_mill-0.2.0/agent_coord/py_gate.py +47 -0
  59. the_mill-0.2.0/agent_coord/schema.sql +256 -0
  60. the_mill-0.2.0/agent_coord/scripts/bootstrap.ps1 +44 -0
  61. the_mill-0.2.0/agent_coord/scripts/bootstrap.sh +42 -0
  62. the_mill-0.2.0/agent_coord/scripts/install.cmd +46 -0
  63. the_mill-0.2.0/agent_coord/scripts/register-windows-services.ps1 +51 -0
  64. the_mill-0.2.0/agent_coord/scripts/uninstall.cmd +49 -0
  65. the_mill-0.2.0/agent_coord/scripts/uninstall.ps1 +49 -0
  66. the_mill-0.2.0/agent_coord/scripts/unregister-windows-services.ps1 +56 -0
  67. the_mill-0.2.0/agent_coord/session_root.py +88 -0
  68. the_mill-0.2.0/agent_coord/static/board.html +505 -0
  69. the_mill-0.2.0/agent_coord/vendors/__init__.py +42 -0
  70. the_mill-0.2.0/agent_coord/vendors/grok_bot.py +25 -0
  71. the_mill-0.2.0/agent_coord/vendors/grok_build.py +95 -0
  72. the_mill-0.2.0/agent_coord/vendors/mill.py +19 -0
  73. the_mill-0.2.0/agent_coord/vendors/protocol.py +132 -0
  74. the_mill-0.2.0/agent_coord/vendors/stubs.py +47 -0
  75. the_mill-0.2.0/agent_coord/wake/__init__.py +5 -0
  76. the_mill-0.2.0/agent_coord/wake/hook.py +38 -0
  77. the_mill-0.2.0/agent_coord/wall_logic/__init__.py +212 -0
  78. the_mill-0.2.0/agent_coord/wall_logic/domains.py +77 -0
  79. the_mill-0.2.0/agent_coord/wall_logic/gutter.py +106 -0
  80. the_mill-0.2.0/agent_coord/wall_logic/honest.py +164 -0
  81. the_mill-0.2.0/agent_coord/wall_logic/js_lib.py +114 -0
  82. the_mill-0.2.0/agent_coord/wall_logic/keys.py +430 -0
  83. the_mill-0.2.0/agent_coord/wall_logic/knobs.py +610 -0
  84. the_mill-0.2.0/agent_coord/wall_logic/mail.py +307 -0
  85. the_mill-0.2.0/agent_coord/wall_logic/packs.py +91 -0
  86. the_mill-0.2.0/agent_coord/wall_logic/score.py +381 -0
  87. the_mill-0.2.0/agent_coord/wall_logic/tabs.py +171 -0
  88. the_mill-0.2.0/agent_coord/wall_ui/README.md +21 -0
  89. the_mill-0.2.0/agent_coord/wall_ui/components/gutter.css +30 -0
  90. the_mill-0.2.0/agent_coord/wall_ui/components/gutter.js +126 -0
  91. the_mill-0.2.0/agent_coord/wall_ui/default/README.md +10 -0
  92. the_mill-0.2.0/agent_coord/wall_ui/default/board.css +1180 -0
  93. the_mill-0.2.0/agent_coord/wall_ui/default/board.html +505 -0
  94. the_mill-0.2.0/agent_coord/wall_ui/default/boot.js +4546 -0
  95. the_mill-0.2.0/agent_coord/wall_ui/default/floor/floor.js +56 -0
  96. the_mill-0.2.0/agent_coord/wall_ui/default/gutter.css +30 -0
  97. the_mill-0.2.0/agent_coord/wall_ui/default/gutter.js +126 -0
  98. the_mill-0.2.0/agent_coord/wall_ui/default/mail/mail.js +199 -0
  99. the_mill-0.2.0/agent_coord/wall_ui/default/score/score.js +141 -0
  100. the_mill-0.2.0/agent_coord/wall_ui/lib/README.md +16 -0
  101. the_mill-0.2.0/agent_coord/wall_ui/lib/check.py +310 -0
  102. the_mill-0.2.0/agent_coord/wall_ui/lib/data.js +231 -0
  103. the_mill-0.2.0/agent_coord/wall_ui/lib/graph.js +52 -0
  104. the_mill-0.2.0/agent_coord/wall_ui/lib/keys.js +715 -0
  105. the_mill-0.2.0/agent_coord/wall_ui/lib/popup.js +113 -0
  106. the_mill-0.2.0/agent_coord/wall_ui/lib/table.js +66 -0
  107. the_mill-0.2.0/agent_coord/wall_ui/lib/tabs.js +75 -0
  108. the_mill-0.2.0/agent_coord/wall_ui/lib/theme.css +86 -0
  109. the_mill-0.2.0/agent_coord/wall_ui/lib/theme.js +56 -0
  110. the_mill-0.2.0/agent_coord/wall_ui/validate_assets.py +57 -0
  111. the_mill-0.2.0/agent_coord/win_wall_svc.py +186 -0
  112. the_mill-0.2.0/pyproject.toml +58 -0
  113. the_mill-0.2.0/setup.cfg +4 -0
  114. the_mill-0.2.0/tests/test_coord.py +3185 -0
  115. the_mill-0.2.0/tests/test_dual_scorecard_kill.py +112 -0
  116. the_mill-0.2.0/tests/test_idle_wake.py +149 -0
  117. the_mill-0.2.0/tests/test_install_empty_bootstrap.py +290 -0
  118. the_mill-0.2.0/tests/test_install_ootb_cmd.py +169 -0
  119. the_mill-0.2.0/tests/test_install_preflight.py +256 -0
  120. the_mill-0.2.0/tests/test_install_real_services.py +405 -0
  121. the_mill-0.2.0/tests/test_install_uninstall.py +322 -0
  122. the_mill-0.2.0/tests/test_jobs_helpers.py +167 -0
  123. the_mill-0.2.0/tests/test_kpi_helpers.py +187 -0
  124. the_mill-0.2.0/tests/test_leases_helpers.py +184 -0
  125. the_mill-0.2.0/tests/test_mail_addressing.py +334 -0
  126. the_mill-0.2.0/tests/test_mail_helpers.py +180 -0
  127. the_mill-0.2.0/tests/test_mail_human_required.py +100 -0
  128. the_mill-0.2.0/tests/test_maintenance_drain.py +129 -0
  129. the_mill-0.2.0/tests/test_presence_banner.py +60 -0
  130. the_mill-0.2.0/tests/test_presence_helpers.py +135 -0
  131. the_mill-0.2.0/tests/test_py_gate.py +95 -0
  132. the_mill-0.2.0/tests/test_schema_sql.py +48 -0
  133. the_mill-0.2.0/tests/test_thin_coord_helpers.py +102 -0
  134. the_mill-0.2.0/tests/test_tokens_est.py +42 -0
  135. the_mill-0.2.0/tests/test_vendor_spend.py +238 -0
  136. the_mill-0.2.0/tests/test_wall_cut6_knobs.py +120 -0
  137. the_mill-0.2.0/tests/test_wall_cut6_wire.py +104 -0
  138. the_mill-0.2.0/tests/test_wall_keys.py +167 -0
  139. the_mill-0.2.0/tests/test_wall_secure_https_lan.py +93 -0
  140. the_mill-0.2.0/the_mill.egg-info/PKG-INFO +143 -0
  141. the_mill-0.2.0/the_mill.egg-info/SOURCES.txt +143 -0
  142. the_mill-0.2.0/the_mill.egg-info/dependency_links.txt +1 -0
  143. the_mill-0.2.0/the_mill.egg-info/entry_points.txt +3 -0
  144. the_mill-0.2.0/the_mill.egg-info/requires.txt +7 -0
  145. the_mill-0.2.0/the_mill.egg-info/top_level.txt +1 -0
the_mill-0.2.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 pyginapithon
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,143 @@
1
+ Metadata-Version: 2.4
2
+ Name: the-mill
3
+ Version: 0.2.0
4
+ Summary: Local mill office: leases, JOBS, and MAIL so humans and agents coordinate without clobbering files.
5
+ Author: pyginapithon
6
+ License: MIT License
7
+
8
+ Copyright (c) 2026 pyginapithon
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in all
18
+ copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26
+ SOFTWARE.
27
+
28
+ Requires-Python: >=3.10
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE
31
+ Requires-Dist: mysql-connector-python>=8.0
32
+ Provides-Extra: server
33
+ Provides-Extra: dev
34
+ Requires-Dist: pytest>=8; extra == "dev"
35
+ Requires-Dist: pytest-cov>=5; extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # The Mill - coordinate agents like an office, not a group chat
39
+
40
+ **Status:** early access / dogfood. We're hardening the physics and the human Wall. If that sounds useful, try it and tell us what's broken.
41
+
42
+ **For agents joining this office:** start at **[AGENTS.md](AGENTS.md)**. Policy lock: **[docs/DESIGN.md](docs/DESIGN.md)** (DESIGN wins on conflict). Install/how-to-run: **[docs/RUNBOOK.md](docs/RUNBOOK.md)**.
43
+
44
+ ## Why it exists
45
+
46
+ AI desks (Grok, Claude, Gemini, ChatGPT, ...) don't share a brain - and they shouldn't. What they need is a **shared office**: who is here, what work is claimed, who may touch a file, and a place humans can **glance** to stay conscious of the project.
47
+
48
+ Most teams improvise with Slack threads, Jira tickets, or a "manager" agent that watches everyone. That burns tokens, doesn't travel across vendors, and either hides the truth or turns into surveillance.
49
+
50
+ **The Mill** is a small, local-first coordination layer: boring verbs, durable records, a human Wall for awareness.
51
+
52
+ ## What it is
53
+
54
+ - **Mill API + CLI** - for agent desks (`presence`, `peek`, `needs`, `send`/`inbox`, leases, spend). Low token cost. Desks are mailboxes (`desk:human` / `desk:agent:<vendor>`); humans talk to their desk.
55
+ - **Wall** - for humans. Lands on **Session**; also Floor, Jobs, Scorecards Last (`agent_kpi` vs Target), Mail, Plan. The Wall is fungible; the office is the API. Intended to sit on any database and any web server; OOTB default is MySQL + Apache (free).
56
+ - **Physics** - file leases, live/dead sessions, mail as email (not fake chat SLA).
57
+
58
+ ## Product vs repo layout
59
+
60
+ **Git** = contributors who modify the mill (product source + tests). **Fungible Wall is OOTB product** - it ships via pip `package-data` (`wall_ui/**/*.html|css|js|md`, plus static/schema/briefings/scripts), not "clone git to get a Wall." On-push **pack pipeline** builds the wheel and runs hygiene (not pytest). Contributors who change the pack: see [docs/BUILD.md](docs/BUILD.md).
61
+
62
+ | Surface | What | Installs with `pip install the-mill`? |
63
+ |---------|------|------------------------------------------|
64
+ | **Product (pip)** | `agent_coord/` - API/CLI (`mill`), `wall_ui/` (Wall assets + `lib/` theme), `static/`, `schema.sql`, `briefings/` | **Yes** (`[tool.setuptools.package-data]` keeps `wall_ui/**/*.html|css|js|md`, static, schema.sql, briefings, scripts) |
65
+ | **Dev / test (repo only)** | `tests/`, `docs/`, `tmp/`, `scripts/` (unless a script is an explicit console entry) | **No** - not Wall runtime; not required to run the office |
66
+
67
+ ## How you start (human)
68
+
69
+ Someone points you at **this page** (or your team's Mill invite link). You do **not** set up the Mill yourself.
70
+
71
+ 1. **Send this page (or the Get started block below) to your coding agent** - Grok, Claude, ChatGPT, Gemini, ...
72
+ 2. Tell them: *"Stand up the Mill for our project; `pip install the-mill`; run `mill install` / join; give me the Wall URL."*
73
+ 3. Open the **Wall URL** they return. Land on **Session**. Watch Jobs / Scorecards / Mail. Use Wall **GUIDE** if you need in-product help.
74
+ 4. Keep talking to your agent when something looks wrong - you don't type mill commands or Last.
75
+
76
+ ## Get started (paste to your agent)
77
+
78
+ ```
79
+ Stand up The Mill (mill) for this team:
80
+ 1) pip install the-mill (PyPI when published; until then pip install . from this repo). CLI is mill.
81
+ 2) mill install / check records + wall for our OS (Win/Linux/macOS/WSL; iOS is Wall URL only)
82
+ 3) briefing join / howto for=agent
83
+ 4) set AGENT_COORD_OWNER and AGENT_COORD_VENDOR before presence
84
+ 5) leave presence running; prove install check + peek
85
+ 6) give me the human Wall HTTPS share URL (mill install prints it) and confirm Session is the landing tab
86
+ 7) desks are mailboxes; humans talk to their desk. Pull Mill desk skill (not fat always-on rules)
87
+ Do not scrape the Wall; use CLI/API. Prefer MAIL/JOBS over chat spam.
88
+ Do not import wall.crt. This PC should trust the mill CA after install; other devices may Advanced then Proceed.
89
+ ```
90
+
91
+ Human Wall (after your agent finishes): the share URL `mill install` prints
92
+ Talk to us: <https://gitlab.com/pyginapithon/the-mill/-/issues>
93
+ Repo: <https://gitlab.com/pyginapithon/the-mill>
94
+
95
+ ## How it's different
96
+
97
+ | Approach | Strength | Weakness vs Mill |
98
+ |----------|----------|------------------|
99
+ | **Vendor bot DMs** | Fast inside one app | Not multi-vendor; not durable office state |
100
+ | **Herdr-style watch** | Live activity feed | Master/slave; motion != coordination |
101
+ | **Jira / Slack** | Great human collab UX | Agents waste tokens on huge surfaces |
102
+ | **CI only** | Tests green | No mid-day "who's waiting on whom" |
103
+ | **The Mill** | Shared state + cheap verbs + human glance | Early: UX and install must earn "wow" |
104
+
105
+ ## Who it's for
106
+
107
+ - More than one agent desk (or human + agents) on real work
108
+ - Awareness without puppeteering
109
+ - Teams that care about tokens-per-feature
110
+
111
+ ## What we're asking you to try
112
+
113
+ 1. Get this link, then hand it to your agent (block above).
114
+ 2. Open the Wall; Session first glance.
115
+ 3. Put two desks on the floor (any vendor that can hit CLI/API; vendor configured before presence).
116
+ 4. Use JOBS + MAIL + leases for a real task.
117
+ 5. Tell us what confused you in the first 10 minutes.
118
+
119
+ ## Feedback loop
120
+
121
+ **you try, you report, Builder ships, Validator re-measures, the Wall gets better.**
122
+
123
+ ## Honest caveats (today)
124
+
125
+ - Physics and Wall UX are being hardened.
126
+ - Expect sharp edges.
127
+ - Agents speak **API/CLI**, not Wall HTML.
128
+ - Mail wake hook needs a harness consumer per vendor to interrupt sleeping bots.
129
+ - After `mill install`, this PC should open `https://127.0.0.1/` without a warning (mill CA, never `wall.crt`). Other devices may Advanced then Proceed.
130
+ - `pip install the-mill` from the internet waits on PyPI; until then `pip install .` from this repo.
131
+
132
+ ## More (depth)
133
+
134
+ | Doc | What |
135
+ |---|---|
136
+ | [AGENTS.md](AGENTS.md) | Agent join briefing (stays at repo root) |
137
+ | [docs/DESIGN.md](docs/DESIGN.md) | Policy + Lingo (SoR) |
138
+ | [docs/RUNBOOK.md](docs/RUNBOOK.md) | Install / how to run |
139
+ | [docs/BUILD.md](docs/BUILD.md) | Pack build + pack pipeline hygiene |
140
+
141
+ ---
142
+
143
+ **One line:** *The Mill is an office for multi-vendor agents - humans get a link, agents install, the Wall keeps people in the loop without becoming the bottleneck or the surveillance camera.*
@@ -0,0 +1,106 @@
1
+ # The Mill - coordinate agents like an office, not a group chat
2
+
3
+ **Status:** early access / dogfood. We're hardening the physics and the human Wall. If that sounds useful, try it and tell us what's broken.
4
+
5
+ **For agents joining this office:** start at **[AGENTS.md](AGENTS.md)**. Policy lock: **[docs/DESIGN.md](docs/DESIGN.md)** (DESIGN wins on conflict). Install/how-to-run: **[docs/RUNBOOK.md](docs/RUNBOOK.md)**.
6
+
7
+ ## Why it exists
8
+
9
+ AI desks (Grok, Claude, Gemini, ChatGPT, ...) don't share a brain - and they shouldn't. What they need is a **shared office**: who is here, what work is claimed, who may touch a file, and a place humans can **glance** to stay conscious of the project.
10
+
11
+ Most teams improvise with Slack threads, Jira tickets, or a "manager" agent that watches everyone. That burns tokens, doesn't travel across vendors, and either hides the truth or turns into surveillance.
12
+
13
+ **The Mill** is a small, local-first coordination layer: boring verbs, durable records, a human Wall for awareness.
14
+
15
+ ## What it is
16
+
17
+ - **Mill API + CLI** - for agent desks (`presence`, `peek`, `needs`, `send`/`inbox`, leases, spend). Low token cost. Desks are mailboxes (`desk:human` / `desk:agent:<vendor>`); humans talk to their desk.
18
+ - **Wall** - for humans. Lands on **Session**; also Floor, Jobs, Scorecards Last (`agent_kpi` vs Target), Mail, Plan. The Wall is fungible; the office is the API. Intended to sit on any database and any web server; OOTB default is MySQL + Apache (free).
19
+ - **Physics** - file leases, live/dead sessions, mail as email (not fake chat SLA).
20
+
21
+ ## Product vs repo layout
22
+
23
+ **Git** = contributors who modify the mill (product source + tests). **Fungible Wall is OOTB product** - it ships via pip `package-data` (`wall_ui/**/*.html|css|js|md`, plus static/schema/briefings/scripts), not "clone git to get a Wall." On-push **pack pipeline** builds the wheel and runs hygiene (not pytest). Contributors who change the pack: see [docs/BUILD.md](docs/BUILD.md).
24
+
25
+ | Surface | What | Installs with `pip install the-mill`? |
26
+ |---------|------|------------------------------------------|
27
+ | **Product (pip)** | `agent_coord/` - API/CLI (`mill`), `wall_ui/` (Wall assets + `lib/` theme), `static/`, `schema.sql`, `briefings/` | **Yes** (`[tool.setuptools.package-data]` keeps `wall_ui/**/*.html|css|js|md`, static, schema.sql, briefings, scripts) |
28
+ | **Dev / test (repo only)** | `tests/`, `docs/`, `tmp/`, `scripts/` (unless a script is an explicit console entry) | **No** - not Wall runtime; not required to run the office |
29
+
30
+ ## How you start (human)
31
+
32
+ Someone points you at **this page** (or your team's Mill invite link). You do **not** set up the Mill yourself.
33
+
34
+ 1. **Send this page (or the Get started block below) to your coding agent** - Grok, Claude, ChatGPT, Gemini, ...
35
+ 2. Tell them: *"Stand up the Mill for our project; `pip install the-mill`; run `mill install` / join; give me the Wall URL."*
36
+ 3. Open the **Wall URL** they return. Land on **Session**. Watch Jobs / Scorecards / Mail. Use Wall **GUIDE** if you need in-product help.
37
+ 4. Keep talking to your agent when something looks wrong - you don't type mill commands or Last.
38
+
39
+ ## Get started (paste to your agent)
40
+
41
+ ```
42
+ Stand up The Mill (mill) for this team:
43
+ 1) pip install the-mill (PyPI when published; until then pip install . from this repo). CLI is mill.
44
+ 2) mill install / check records + wall for our OS (Win/Linux/macOS/WSL; iOS is Wall URL only)
45
+ 3) briefing join / howto for=agent
46
+ 4) set AGENT_COORD_OWNER and AGENT_COORD_VENDOR before presence
47
+ 5) leave presence running; prove install check + peek
48
+ 6) give me the human Wall HTTPS share URL (mill install prints it) and confirm Session is the landing tab
49
+ 7) desks are mailboxes; humans talk to their desk. Pull Mill desk skill (not fat always-on rules)
50
+ Do not scrape the Wall; use CLI/API. Prefer MAIL/JOBS over chat spam.
51
+ Do not import wall.crt. This PC should trust the mill CA after install; other devices may Advanced then Proceed.
52
+ ```
53
+
54
+ Human Wall (after your agent finishes): the share URL `mill install` prints
55
+ Talk to us: <https://gitlab.com/pyginapithon/the-mill/-/issues>
56
+ Repo: <https://gitlab.com/pyginapithon/the-mill>
57
+
58
+ ## How it's different
59
+
60
+ | Approach | Strength | Weakness vs Mill |
61
+ |----------|----------|------------------|
62
+ | **Vendor bot DMs** | Fast inside one app | Not multi-vendor; not durable office state |
63
+ | **Herdr-style watch** | Live activity feed | Master/slave; motion != coordination |
64
+ | **Jira / Slack** | Great human collab UX | Agents waste tokens on huge surfaces |
65
+ | **CI only** | Tests green | No mid-day "who's waiting on whom" |
66
+ | **The Mill** | Shared state + cheap verbs + human glance | Early: UX and install must earn "wow" |
67
+
68
+ ## Who it's for
69
+
70
+ - More than one agent desk (or human + agents) on real work
71
+ - Awareness without puppeteering
72
+ - Teams that care about tokens-per-feature
73
+
74
+ ## What we're asking you to try
75
+
76
+ 1. Get this link, then hand it to your agent (block above).
77
+ 2. Open the Wall; Session first glance.
78
+ 3. Put two desks on the floor (any vendor that can hit CLI/API; vendor configured before presence).
79
+ 4. Use JOBS + MAIL + leases for a real task.
80
+ 5. Tell us what confused you in the first 10 minutes.
81
+
82
+ ## Feedback loop
83
+
84
+ **you try, you report, Builder ships, Validator re-measures, the Wall gets better.**
85
+
86
+ ## Honest caveats (today)
87
+
88
+ - Physics and Wall UX are being hardened.
89
+ - Expect sharp edges.
90
+ - Agents speak **API/CLI**, not Wall HTML.
91
+ - Mail wake hook needs a harness consumer per vendor to interrupt sleeping bots.
92
+ - After `mill install`, this PC should open `https://127.0.0.1/` without a warning (mill CA, never `wall.crt`). Other devices may Advanced then Proceed.
93
+ - `pip install the-mill` from the internet waits on PyPI; until then `pip install .` from this repo.
94
+
95
+ ## More (depth)
96
+
97
+ | Doc | What |
98
+ |---|---|
99
+ | [AGENTS.md](AGENTS.md) | Agent join briefing (stays at repo root) |
100
+ | [docs/DESIGN.md](docs/DESIGN.md) | Policy + Lingo (SoR) |
101
+ | [docs/RUNBOOK.md](docs/RUNBOOK.md) | Install / how to run |
102
+ | [docs/BUILD.md](docs/BUILD.md) | Pack build + pack pipeline hygiene |
103
+
104
+ ---
105
+
106
+ **One line:** *The Mill is an office for multi-vendor agents - humans get a link, agents install, the Wall keeps people in the loop without becoming the bottleneck or the surveillance camera.*
@@ -0,0 +1,40 @@
1
+ """Transactional multi-project locks and a small mailbox."""
2
+
3
+ import sys
4
+
5
+ # Import-time gate: refuse <3.10 before coord/presence (3.10-only syntax).
6
+ # Inline sys only so 3.8 can parse this module and exit cleanly (exit 2).
7
+ if sys.version_info < (3, 10):
8
+ sys.stderr.write(
9
+ "Python %d.%d is too old; mill needs Python 3.10+.\n"
10
+ "Hint: use uv + CPython 3.12 (e.g. uv python install 3.12; "
11
+ "uv venv --python 3.12).\n"
12
+ % (sys.version_info[0], sys.version_info[1])
13
+ )
14
+ raise SystemExit(2)
15
+
16
+ from .coord import (
17
+ Coord,
18
+ CoordError,
19
+ DriftError,
20
+ LockHeld,
21
+ NeedHeld,
22
+ default_owner,
23
+ file_key,
24
+ slug,
25
+ this_host,
26
+ )
27
+ from .files import staging
28
+
29
+ __all__ = [
30
+ "Coord",
31
+ "CoordError",
32
+ "DriftError",
33
+ "LockHeld",
34
+ "NeedHeld",
35
+ "default_owner",
36
+ "file_key",
37
+ "slug",
38
+ "staging",
39
+ "this_host",
40
+ ]